インストール(Anaconda)
Anacondaで2016年2月現在最新のOpenCV3.1をインストールするには、下記のサイトから取ってくるようにする。
conda install --channel https://conda.anaconda.org/menpo opencv3
importしてバージョンを確認。
In [1]: import cv2
In [2]: print cv2.__version__
3.1.0
画像を読み込む
cv2.imreadで画像を読み込む。このとき画像はBGRになっている。
このままmatplotlibで表示しようとすると色がおかしくなるので注意が必要。
sckit kimageやscipyで画像を読み込むとRGBになる。
読み込んだ画像のタイプは、numpy arrayになっている。
In [5]: I = cv2.imread('Lenna.bmp')
In [6]: I = cv2.imread('lena512color.tiff')
In [7]: type(I)
Out[7]: numpy.ndarray
PILの場合
In [8]: from PIL import Image
In [9]: I = Image.open('Lenna.bmp')
In [10]: type(I)
Out[10]: PIL.BmpImagePlugin.BmpImageFile
Sckit Imageの場合
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の場合
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の場合
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])
In [26]: cv2.imwrite('output.png', I)
Out[26]: True
ただし、OpenCVで保存する場合は、Interleaved形式で、BGRの順番に色が並んでいないといけない。
そのまま保存すると下記のようになる。
画像を表示する
画像の表示は、imshowを使う。
imshow(winname, mat)
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を最初に実行するとよい。
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を使った方が楽。
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を使う。
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()