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의 순서로 색이 정렬되지않으면 안된다. 이 대로 저장하면 하기와 같이 된다.
화상을 표시한다
화상의 표시는, 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()
색변환
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()