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