工学の博士です。ここ数年、開発にpythonを使っています。pythonはライブラリも豊富で使いやすいと思います。しかし、ハマってしまうときはあるので、自分自身への備忘録を兼ねて、コツを紹介します。
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 ) )
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿