OpenCVのキャプチャは「とりあえず」という使い方が一番

えっと技術的なことをつらつらと書きます

OpenCVを使ってカメラのキャプチャを行う場合

フレームレート、ビデオフォーマット、解像度、等が設定できない場合があります

とりわけ、OpenCV 1.0の場合は全然できません

プロパティを設定するcvSetCaptureProperty()という関数の実装が不完全であり、

設定できない項目がかなりたくさんあります

cvCaptureFromCAM()、もしくはcvCreateCameraCapture()を呼ぶと勝手に決められちゃうので

それ以降の変更ができない場合があります

どうしてもOpenCVだけで行いたい場合は、highgui.hの中身を書き換えなきゃならない

でも、書き換える内容はカメラのCD付属の開発用のサンプルプログラムを読まないとわからないので

それがDirectShowを使っていたりすると絶望的なんです

ちなみにOpenCV 2.xでも設定できない項目多数です

これは未確認ですが、先にRGBフォーマットを見つけてしまうと

OpenCVがYUVフォーマットを無視してキャプチャしてくれちゃうらしいです

そんなわけで、OpenCVのみでキャプチャを行うのは非常に不便

ただちょろんっと画像をとってくるだけならいいけど、フォーマット、解像度など設定したい場合は非常に不便

というか、cvCreateCameraCapture()とcvSetCaptureProperty()、cvQueryFrame()でキャプチャしてみて、

ダメそうならさっさと他の方法を考えるべきです

というわけでvideoInputLibraryを入れてみました

そんなに書き換える部分が多くなくてうれしいです

videoInputLibraryを挟めば、ちゃんとYUVの方で認識してくれたので解像度の変更もできました

これ以外だと、あとはもうDirectShowを使うしかないです

それもまた面倒な話ですね