CS/EGシリーズカメラのPythonサンプルプログラムでOpenCVを使いたい件(ベイヤーの場合)
CS/EGシリーズカメラのPythonサンプルプログラムはOpenCVで使えるようにはコーディングされていません。
これは、特定のライブラリに依存させない、一般的なコードとなっているためです。
以下「GrabImage.py」を例に説明します。
Python-OpenCVはnumpyを利用しており、画像データはnumpy配列として取り扱われます。
GrabImage.pyはwork_thread()中のMV_CC_GetOneFrameTimeout()で画像を取得しており、画像データはpDataで引き渡されますが、これはC言語で言うところのポインタで、このままではOpenCVで使用できません。
このpDataをnumpy配列に変換します。
1)以下の2行のimportを追加します。
- import numpy as np
- import cv2
2)__main__のret = cam.MV_CC_StartGrabbing()行の前に、カメラから出力される画像データ形式をベイヤーに設定する以下の行を追加します。
- ret = cam.MV_CC_SetEnumValueByString(“PixelFormat”,”BayerRG8“)
BayerRG8の部分はカメラによって異なります。
MVSを開きカメラを接続後Feature Tree → Image Fromat Control → Pixel Format
に選択できる文字を下記表から探して対応する文字列を入れてください。
MVSでの表示 | 対応する文字列 |
Bayer RG 8 |
BayerRG8 |
Bayer GR 8 |
BayerGR8 |
Bayer BG 8 |
BayerBG8 |
Bayer GB 8 |
BayerGB8 |
3)work_thread()にpDataをnumpy配列に変換するコードに書き換えます。
(画像の確認が出来るようにcv2.imshow()とcv2.waitKey()の2行を入れています。)
|
cv2.COLOR_BayerBG2BGRの部分に先ほど入力した文字列に対応した文字列を入力してください。
対応する文字列 | |
BayerRG8 |
cv2.COLOR_BayerBG2BGR |
BayerGR8 |
cv2.COLOR_BayerGB2BGR |
BayerBG8 |
cv2.COLOR_BayerRG2BGR |
BayerGB8 |
cv2.COLOR_BayerGR2BGR |
cv2.cvtColor()の第2引数の表記は、直感的なベイヤーの並びと合っていません。
これはOpenCVの仕様です。
仕様は下記場所に記載されています。
映像の色味が正しくない場合にはcv2.cvtColor()の第2引数を間違えている場合があります。