데이터분석/Vision Recognition

openCV를 이용한 간단한 이미지 조작

늘근이 2015. 12. 1. 20:40

openCV를 이용하고 설치하는것은 굉장히 까다롭다. 이에대해 한페이지 무더기로 글을 쌌으므로 확인하도록 한다.

 

일단 이미지 로딩은 다음과 같다.

 

원본이미지는 다음과 같다.

 

 

 

 

그레이스케일로 이미지 불러오기

 

 

import cv2

import numpy as np

image = cv2.imread('test01.jpg',0)

 

 

이렇게 하면 그레이스케일로 잘 로딩할수 있다.

 

다만 openCV에서는 괴상하게도 X를 누르면 잘 꺼지지가 않는다. 다음처럼 코딩해서 뭔가 그림이 꺼지게끔 해야한다.

 

 

 

실제 이미지 띄우기

 

cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

파이썬 코드는 단순한 C++의 코드의 wrapper클래스이기 때문에, 실제 C++ 구현방식을 따라서 간다.

 

 

 

이미지 쓰레시홀딩 (Otsu 쓰레시홀딩)

평범한 global thresholding

 

ret1,th1 = cv2.threshold(image,127,255,cv2.THRESH_BINARY)

 

 

Otsu's thresholding

 

ret2,th2 = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

 

가우시안 필터링 후 Otsu's thresholding

 

blur = cv2.GaussianBlur(image,(5,5),0)

 

ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

 

각각의 이미지를 확인하는 방법은 역시나 같다. image대신 th1 / th2 / th3 을 확인하면 되고, 실제 구분값은 ret1 / 2 / 3 을 확인하면 된다.

 

Otsu 구분법이 왜 힘을 가지는가? 에 대해서는 나중에 보충

 

가우시안 필터링 후 스레시홀딩을 걸었을때는 다음과 같다.