OpenCV+mingw で web カメラを使う

OpenCV は web カメラのデータとかが簡単に取れてすごいつかいやすいんだよー、と聞いた。 android でも動かせると楽しそうだったりするので、とりあえず手元で動かそうと思ったのだが、 ぜんぜん簡単じゃないじゃん (怒)

最初は cvQueryFrame の結果を表示させても灰色の画面しか出なくてわけが分からなかったが、cvCreateCameraCapture が NULL を返している模様。 つまり、カメラが見つからないというエラーが返ってきていることになる。

まず、OpenCV がサポートするのは Video for Windows (VfW), Matrox Imaging Library(MIL)だけで、USB Video Class (UVC) は サポート外 (参照: OpenCV reference: cvCaptureFromCAM)。 といっても、最近の web カメラはほとんどがUVCで、古いwebカメラってそもそもvistaとかwin7のドライバがないから使えなかったりするし、 UVC が使えないのは致命的。

ではどうするか。 先人の知恵 (UVCのカメラ画像をOpenCVで操作: 涙目ブログ) によれば、 DirectX の機能を叩くために、 EWCLIB (in_subaru 様作) と EWCLIB→OpenCV ラッパークラス (masayashi 様作) を組み合わせてコンパイルするのだとか。

しかし、mingw 環境では必要な DirectX 関係のヘッダーがそろわないのでコンパイルが面倒です (とここにもかいてある)。 ならば、この EWCLIB→OpenCV ラッパークラスを VC 環境でコンパイルして、ラッパーDLLを作ればよいのでは。

・・・ええ、作りましたよ。もってってください。

DirectShowWrapper.zip [97kb]
mingw で使う人のための DLL、ヘッダファイルと
DirectShowWrapperSrv.zip [97kb]
生成に使ったVC++2010 用のソースファイル一式