突如思い立ってopenCVで遊んでみた

ゼミで画像処理をやっている後輩が「openCVがなんたらかんたら」、と言っていたので、画像処理を志して今の研究室に来たころの自分*1を思い出すためにopenCVに触れてみることにする。

macなら簡単にできるよ

というのが結論。

windowsなら割と簡単なのは周知の事実だけど、macではどうなんだろ?と思っていたがすごく簡単だった。
ググればいろいろでてくるけど、おそらく一番簡単な方法での導入を行った。

sudo port install opencv

以上。
macportsopencvを入れるとバージョンが古いだとか、x11を先に入れているとこけるとか、いろいろ情報があったけど、自分の環境(leopard)では、バージョンは1.0でインスコは割とすんなりいった。
途中、gtkのあたりでx11が見つからない、的なエラーがでたけど、エラーメッセージを読むとシンボリックリンクがなかったからっぽい。
対処法まで吐き出してくれていた。
シンボリックリンクを作成して再びインスコしたら、あっさり完了。
わーい。

あとは、pkg-configのためのパスを.bash_profile辺りに通してやる。
macportsopencvインスコした場合は

export $PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/local/lib/pkgconfig

でおk。

/opt/local/share/opencv/sample 以下にCとPyhtonのサンプルプログラムがあって、それだけでかなり「すげー」ってなれる。
Pythonなら実行するだけ。
Cならコンパイルの必要があるが、これもスクリプトが一緒に置いてあるのでそれを実行すれば即座に使用可能。

sudo sh build_all.sh

でおk。

使ってみる

サンプルプログラムに関する解説はないので、プログラム名と実行結果から何を行っているかを類推しないといけないけど、どうしても解説が欲しいなら
OpenCV%2 の編集 - Co-Coa Wiki
なんかがある。ほんとにかる〜い解説。
画像なんで結果を見ればだいたい何をやっているのかは分かる。

おすすめ

macbookにはウェブカメがついているので、lkdemoとfacedetect。
lkdemoはウェブカメ上の任意に選択した特徴点をリアルタイムで追跡するというもの。
場所にもよるけど、これがまたなかなかの精度なので面白い。
facedetectは人の顔識別をリアルタイムで行ってくれる。
facedetectはとりあえずすっごいテンションがあがる。
facedetectは実行のときに引数を与えてやる必要がある。

./facedetect --cascade="../../haarcascades/haarcascade_frontalface_default.xml"

おそらく、カメラから取得した画像データをxml形式で吐き出していて、それをリアルタイムで処理しているのだと思われる。

メモ

opencv関係のヘッダーをインクルードしたいときは

gcc hoge.c `pkg-config --cflags `opencv --lib opencv`

とする。

その他

サンプル以外のことをしたり、もっと詳しく勉強するためには
OpenCV.jp
を参考にするしかないですよ、と。

*1:気づいたら画像処理を研究する道は閉ざされていたのだが…