C#2.0でDirectShowに挑戦中

カメラから取り込んだ映像をリアルタイムに画像処理して画面表示する実験なんかでは、OpenCVライブラリを利用するのがポピュラーかと思う。ただ、OpenCVは凝ったGUIプログラミングはできず、本格的なデモアプリには力不足なときがある。かといってC++でDirectShowっていうのは面倒すぎる。
そんなわけで、比較的使いやすい(というか使い慣れてる)C#で、DirectShowを使ったリアルタイム画像処理に挑戦している。DirectShowの.NETラッパーは既に存在していて、↓からダウンロードできる。

最新バージョンは2.0。ちゃんと .NET2.0 に対応してて、フリーかつオープンソースで開発されていて配布しやすく*1、かつ巨大なSDKをインストールしなくてもDirectShow開発できる、というなかなかのスグレモノである。ただ関数やクラス設計などはC++版とほぼ同じなので、オブジェクト指向的な美しさは正直ない。。。
とりあえず今やりたいことは、ウェブカメラから映像をキャプチャして、それをリアルタイムに画像処理し、出力画像を画面に表示するという動作なんだけど、やっと今日、それができた。DirectShow独特のグラフとかフィルタとかの概念に関する資料が乏しくて大変。。。

(リアルタイムに)RGB各成分ごとの二値化のようなことをした出力結果。

今後の目標はコンポーネントの作成。各種設定はプロパティでできて、画像処理コードはイベントハンドラとして記述するみたいな感じのものね。これでDirectShowの定型処理が隠れるし、イベントハンドラからC++コード呼び出せば、高速演算やらOpenCVやら選択肢が増えるし、そうとう便利なはず。

*1:[追記] LGPLライセンスなので再配布時はお気をつけて。