Armadilloフォーラム

Armadillo-810でカメラモジュールの画像キャプチャ時の色

shinano

2015年6月22日 17時20分

Armadillo-810 とカメラモジュールを使って、画像キャプチャのテストしています。
OpenCV を使って取り込む時は、問題無いのですが、V4L2(Video for Linux Two)を使った場合は、色がおかしいです。

ソースコードは、アットマークテクノテクノさんが公開しているものほぼそのままで
OpenCVは、
http://armadillo.atmark-techno.com/opencv_display
V4L2は、
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
です。

実際に取り込んだファイルを添付しました。
V4L2で取り込んだファイルは、黄色っぽくなってしまっています。

VIDIOC_S_FMT の フォーマット指定で、ドライバとして対応しているものの中で
・V4L2_PIX_FMT_YUYV
・V4L2_PIX_FMT_VYUY
・V4L2_PIX_FMT_UYVY
・V4L2_PIX_FMT_RGB565
上記の生データ保存し、
v4l-utils and libv4l(http://freecode.com/projects/libv4l) の、rgbyuv.c の中のルーチン使ってのRGB変換をしてみたり(一部関数のみコピペしてテスト)、
YUV Player(http://osdn.jp/projects/sfnet_raw-yuvplayer/) で表示してみたりしましたが、
結果は同じでした。

映像処理に詳しい人に聞いた所、ホワイトバランスがおかしいのでは無いかということでした。

カメラモジュール01は、オートホワイトバランスに対応しているはずなのですが、有効になっていないという理解で良いでしょうか?
また、OpenCVで綺麗になっているのは、ソフト的に内部で自動的にオートホワイトバランスの処理をしているということで良いでしょうか?

何かご存知の方がいましたら、情報をお願いします。

よろしくお願いします。

ファイル ファイルの説明
openCVTest.jpg OpenCVで取り込んだファイル
V4L2Test.jpg V4L2で取り込んだファイル
コメント

at_kojiro.yamada

2015年6月23日 14時50分

VIDIOC_S_FMTの発行からVIDIOC_STREAMONの発行までの間で、

  sleep(1);

などで0.5秒以上待ってから、
VIDIOC_STREAMONを発行すると改善しないでしょうか?

カメラモジュール01の撮像素子 OV7725のデバイスドライバー[1]にて、
ioctlでVIDIOC_S_FMTが発行された時にカメラをソフトリセットするようになっ
ています。

そのため、VIDIOC_S_FMTの発行から15フレーム程度は、
AGC(Auto Gain Control)およびAWB(Auto White Balance)の効果が
十分に反映されておりません。

サンプルコード(v4l2-sample)で16枚目の画像を確認しているのもそのためです。

[1] linux-3.4-at/drivers/media/video/ov772x.c

> カメラモジュール01は、オートホワイトバランスに対応しているはずなので
> すが、有効になっていないという理解で良いでしょうか?

デフォルトでは有効になっています。
camctrlコマンドにて確認できます。
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

> また、OpenCVで綺麗になっているのは、ソフト的に内部で自動的にオートホ
> ワイトバランスの処理をしているということで良いでしょうか?

その可能性もあるかもしれませんが、
厳密にはコードを読んでみなければわかりません。

OpenCV内での処理に時間がかかり、結果的にVIDIOC_S_FMTの発行から15フレー
ム程度経過した後の画像が取り込まれている可能性も考えられます。

shinano

2015年6月23日 17時12分

   sleep(1);

試した所、うまく行きました。

説明も分かりやすく納得できました。
ありがとうございます。