140105a0正月はOpenCVを少しいじっていた。
OpenCVは以前QRコードのデコーダを動かしたくて、いじったことがある。調べたら5年前の話だった。機会があれば使いたいと、ずっと思っていたのだが今回やりたいことを思いついたので、いじり始めた。

最初、Windows用のバイナリをダウンロードし以前と同じようにPythonで試す。サンプルのコードは動くが、Pythonに慣れていないのでコードを書くのが面倒だ。それにPythonで書いてもコードが極端に短くなったり、わかりやすくなったりしている気がしない。

C言語のサンプルプログラムのコンパイルを試みるが、リンクするライブラリの多さに挫折する。

調べると、pkg-configコマンドが使える環境だと、`pkg-config --libs opencv`とやるだけでライブラリの指定が可能らしい。

OpenCV 2.4.8 for Cygwin (Japanese)というページの指示どおりにOpenCVのインストールを行う。しかしcmakeコマンドを実行したところでエラーになる。いろいろ試行錯誤して調べた結果、OpenCVのソースのファイルにread permissionがついていないのが原因らしい。read permissionがついていないのは、ソースのzipファイルをwindows側のプログラムで展開したせいだと思う。
read permissionが無くても、cygwin環境では普通に読めるし、コンパイルもできる。cmakeの一部の機能だけ動いていないような気がする。chmod -R +r .で解決。cmakeのエラーが発生しなくなりOpenCVのコンパイル、インストールが完了した。

cygwinで使うOpenCVは快適だ。emacs+makeで直接コンパイル&修正できる。OpenCVの本のプログラムがC++で書かれていることに気がついてからは、更に楽になった。

C++といっても、変数の宣言を途中で行うことと、引数の省略程度ぐらいしか使っていないので、パッと見はCに見えるので、気がつくのが遅れた。Cで書くと、省略された引数をやたらと補わなければならないので気がついた。正月中にチェスボードの認識、カメラのキャリブレーションなどが動くようになった。

OpenCVのプログラムは、USBカメラで取得した画像に認識した結果を上書きして、それっぽい感じで楽しい。しかし、目的がないと、ひととおりサンプルを試して終わってしまう。その後、やりたいことがあるかどうかが勝負。