2014年3月4日火曜日

OpenCV2 画像の変換


pythonはライブラリが豊富ですが、ライブラリ間のフォーマットは同じであるとは限りません。
画像処理ライブラリに関しても主なものでOpenCVとPILというライブラリがあります。
その間の変換方法について解説します。
この機能、実際使う人がどのくらいいるのかは不明ですが、自分の備忘録も兼ねています。
もし、お役にたつならどうぞ。


CVからPIL
pim = Image.fromarray( cv2.cvtColor( cvim, cv2.cv.CV_BGR2RGB ) )


CVにおけるHSVとRGB,BGRの変換
xx = cv2.cvtColor( x, cv2.cv.RGB2HSV )

実際のところ、画像はnumpy.arrayとして表現されているので、
numpyのスライス機能を使えば同様の処理が可能なことがあります。
たとえば、RGBとBGRの変換では1層目と3層目を入れ替えるので、


tmp = x[:,:,0]
x[:,:,0] = x[:,:,2]
x[:,:,2] = tmp


とします。

反転もnumpy.arrayなら簡単にできます。
y = x[:,range(x.shape[1]-1,0,-1),:]
とすると左右反転します。
スライス機能を使うとなぜかうまくいかなかったのでrange関数使いました。

あと、ロボット用ソフトウェアのためにOpenRTミドルウェアというものを使っています。
pythonでロボットのモジュールが記述できます。
そのなかで使用する画像形式への変換方法についても載せておきます。


RTC.CameraImageからCVへの変更
## ci : cameraImage
### x : numpy.array


ci = RTC.CameraImage( tm, .... )
x = numpy.fromstring( ci.pixels, dtype=numpy.uint8 ).reshape( ci.height, ci.width, -1 )

CVからRTC.CameraImageへの変換
ci.pixels = x.tostring()
ci.width = x.shape[1]
ci.height = x.shape[0]

RTC.CameraImageからPILへの変換cam = RTC.CameraImage(...)
cvim = nmp.fromstring( cam.pixels, dtype=nmp.uint8 ).reshape( cam.height, cam.width, 3 )
pim = Image.fromarray( cv2.cvtColor( cvim, cv2.cv.CV_BGR2RGB ) )

0 件のコメント:

コメントを投稿