본문 바로가기
IT/Python

Python 과 OpenCV 기초 (scaling, rotating, cropping)

by Jang HyunWoong 2014. 12. 19.

먼저 opencv (import cv2)를 사용하려면 opencv 라이브러리를 다운 받아야 합니다. 

 

저는 기존에 python 3.4를 사용하고 있었는데, 아직 opencv가 python 3.4를 지원해주지 않는다고 해서 python 2.7를 다운 받았습니다. 

(2014.09 기준.. 어떻게 하면 python 3.3 에 적용시킬 수 있다는데.. 그냥 편하게 2.7 받았습니다. )

 

http://opencv.org/ (opencv다운 받습니다. 기존에 받으셨으면 안받아도 됩니다. ) 

http://docs.opencv.org/trunk/doc/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.htm (참고) 

 

위에 들어가서 numpy, matplotlib를 같이 받습니다. 

 

matplotlib는 같이 엮여 있는 모듈들이 많아 다 다운 받아 설치해야 합니다. 

 

opencv가 설치된 곳에 cv2.pyd가 설치가 되어있습니다. (opencv\build\python 보통 이 안에 있을거에요)

 

복사해서  C:/Python27/lib/site-packages 에 넣어줍니다. 

 

>>> import cv2

>>> print cv2.__version__ 

 

확인. 

 

아래 윈도우7에 있는 기본 그림을 가지고 해보겠습니다. (Tulips.jpg)


<python shell>

>>> #cv2 패키지를 넣습니다. 

>>> import cv2

>>> #이미지를 로딩하고, 보여줍니다. 

>>> image = cv2.imread("Tulips.jpg")

>>> cv2.imshow("Tulips", image); cv2.waitKey(0) 


<결과>




 

지금 너무 크기 때문에 줄이도록 하겠습니다. (scaling)


가로 크기를 100px로 스케일링하겠습니다. 


>>> r = 100.0/image.shape[1]

>>> dim = (100, int(image.shape[0]*r))

>>> resized = cv2.resize(image, dim, interpolation = cv2.INTER_AREA)

>>> cv2.imshow("scaling", resized)

>>> cv2.waitKey(0)


<결과>


  


r과 dim을 계산하는 방법인데 쉽습니다. 

가로 크기를 100으로 하기 때문에


100:x = 가로(image.shape[1]):세로(image.shape[0])


이렇게 계산 해주는 식입니다. (중학교 때 인가.. 다 배웠었죠..)



이제 그림을 rotating해보겠습니다. 


>>> image.shape[:3]

(768, 1024, 3)

>>> (h, w) = image.shape[:2] #height, weight값을 넣어줍니다. 

>>> center = (w/2, h/2) #중앙값을 구해줍니다. 그림을 돌릴 때 기준이 되는 중앙입니다. 

>>> Mat = cv2.getRotationMatrix2D(center, 180, 1.0) #1.0은 스케일입니다. 0.5로하면 작아지겠죠

>>> rotated = cv2.warpAffine(image, Mat, (w, h))

>>> cv2.imshow("rotated", rotated); cv2.waitKey(0)


<결과>


 



이미지의 특정 부분을 잘라보도록 하겠습니다. (cropping)


>>> cropping = image[100:200, 350:450] #높이를 100~200, 가로를 350~450 사이의 픽셀값을 cropping에 넣었습니다. 

>>> cv2.imshow("cropping", cropping)

>>> cv2.waitKey(0)


<결과>



마지막으로 자른 결과를 PNG파일 포멧으로 저장하는 방법


>>> cv2.imwrite("thumbnail.png", cropping)

반응형