IT Japan

[Python]Python으로 OpenCV를 사용 본문

IT/Programming

[Python]Python으로 OpenCV를 사용

swhwang 2017. 6. 7. 09:35
반응형

인스톨(Anaconda)

Anaconda로2016년 2월현재 최신의OpenCV3.1를 인스톨하기위해서는  하기와 같이 취득한다.

conda install --channel https://conda.anaconda.org/menpo opencv3

import해서 버젼을 확인

ipython


In [1]: import cv2

In [2]: print cv2.__version__
3.1.0






화상을 읽어들임

cv2.imread로 화상을 읽어들임. 이 때 화상은 BGR로 되어있다.
이대로 matplotlib로 표시하려고 하면 색이 이상하게 변하므로 주의할것.

sckit kimage 와 scipy로 화상을 읽어들이면 RGB로 된다.

읽어들인 화상의 타입은, numpy array로 되어있다.

ipython


In [5]: I = cv2.imread('Lenna.bmp')

In [6]: I = cv2.imread('lena512color.tiff')

In [7]: type(I)
Out[7]: numpy.ndarray






PIL의 경우

ipython

 


In [8]: from PIL import Image In [9]: I = Image.open('Lenna.bmp') In [10]: type(I) Out[10]: PIL.BmpImagePlugin.BmpImageFile




Sckit Image의 경우

ipython


In [11]: from skimage import io

In [12]: I = io.imread('Lenna.bmp')

In [13]: type(I)
Out[13]: numpy.ndarray

In [14]: Icv = cv2.imread('Lenna.bmp')

In [15]: print Icv[0,0,:]
[125 137 226]

In [16]: print I[0,0,:]
[226 137 125]



Scypi의 경우

ipython


In [17]: from scipy import misc

In [18]: I = misc.imread('Lenna.bmp')

In [19]: type(I)
Out[19]: numpy.ndarray

In [20]: print I[0,0,:]
[226 137 125]




matplotlib의 경우

ipython


In [21]: from matplotlib import image

In [22]: I = image.imread('Lenna.bmp')

In [23]: type(I)
Out[23]: numpy.ndarray

In [24]: print I[0,0,:]
[226 137 125]



화상을 저장한다.

opencv로 화상을 저장하는 경우는, imwrite를 사용한다.

imwrite(filename, img[, params])

ipython


In [26]: cv2.imwrite('output.png', I)
Out[26]: True




다만、OpenCV로 저장하는 경우는、Interleaved형식으로、BGR의 순서로 색이 정렬되지않으면 안된다.
이 대로 저장하면 하기와 같이 된다.



output.png


화상을 표시한다

화상의 표시는, imshow를 사용

imshow(winname, mat)

python


import cv2

I = cv2.imread('./data/SIDBA/Lenna.bmp')

cv2.namedWindow('window')
cv2.imshow('window', I)
cv2.waitKey(0)
cv2.destroyAllWindows()



다만, 이것을 interactive한 ipython으로 하면 ipython이 사망한다.

ipython으로 하는경우는, 하기와 같이 startWindowThread를 최초에 실행하면 좋다.

ipython


In [7]: I = cv2.imread('./data/SIDBA/Lenna.bmp')

In [8]: cv2.startWindowThread()
Out[8]: 1

In [9]: cv2.namedWindow('window')

In [10]: cv2.imshow('window', I)

In [11]: cv2.waitKey(0)
Out[11]: 10

In [12]: cv2.destroyAllWindows()







다만 화상을 표시하는 경우는, 특별한 이유가 없는 한 matplotlib을 사용하는 것이 편하다.

ipython


In [12]: import matplotlib.pyplot as plt
    ...: import cv2
    ...: 
    ...: I = cv2.imread('./data/SIDBA/Lenna.bmp')
    ...: 
    ...: plt.imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
    ...: plt.show()









範囲を選択_036.png

색변환

opencv로 화상을 읽어들인 경우는, 화상이 BGR로 되어있으므로, matplotlib로 표시하기 위해서는RGB로 변환할 필요가 있다.
이럴 때는 cvtColor를 사용한다.

python



import numpy as np import cv2 import matplotlib.pyplot as plt I = cv2.imread('./data/SIDBA/Lenna.bmp') J = cv2.cvtColor(I, cv2.COLOR_BGR2RGB) plt.imshow(J) plt.show()








반응형

'IT > Programming' 카테고리의 다른 글

Python(변수의 값 다시 할당하기)  (0) 2018.01.24
Python(자료형)  (0) 2018.01.24
제 8장 - 화일 조작 / 기타의 것들  (0) 2016.03.22
제 7장 - 구조체와 공용체  (0) 2016.03.22
제 6장 - 배열과 포인터  (0) 2016.03.22
Comments