2010年12月8日水曜日

OpenCV 2.2 をインストールしてみた。

というわけで、MacBookにOpenCV 2.2をインストールしてみた。
いろいろとパワーアップしたらしいが、個人的に一番嬉しいのはQt対応によって実装されたWindow機能の強化。設定ウィンドウを作れたり、OpenGLで3Dモデルの表示ができるようになったりしたらしい。

というわけで必要な人はインストールの前準備。
 - CMakeのインストール(必須)
 - ウィンドウ機能を強化したい人はQtを導入。
 - avi以外の動画も読み込めるようにしたい人はffmpegをインストール
 - GPGPUを使いたい人はCUDA(ただしCUDA対応はアルファ版らしい)

OpenCVの公式からソースコードをダウンロードします。
tarで圧縮されたのでもいいけど、CUDAを使いたい人はSubversionでリポジトリからダウンロードしましょう。ただし、CUDA対応はまだアルファ版らしい(ちなみにOpenCV的には”gpuモジュール”という名前らしい)

ダウンロードしたら展開して、ターミナルでcmake。以下はQtとQt OpenGLに対応させ、かつユニバーサルバイナリにするオプションのつけ方。
cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_QT=ON -DWITH_QT_OPENGL=ON -DBUILD_SHARED_LIBS=ON CMAKE_OSX_ARCHITECTURES='i386;x86_64'
ちなみにCUDA対応させたい人は「-DWITH_CUDA=ON」もつける。

あとはmakeとmake installでインストール完了!
%make
%sudo make install
Qtを使ったサンプル(opencv/samples/cpp/Qt_sample)を実行した結果がこちら。

左が元動画(同梱のaviファイル)、右が動画像から画像処理でなんかあの棒っぽいやつを検出し、OpenGLで立方体を重ねあわせたもの。

これを実現するためのソースコードは260行ほど。わざわざOpenGL用の画像に変換して(ryとかやる必要もなく、とても簡単に実装できます。Qt対応まじおすすめ。
(ちなみにMacでのコンパイル時には「#include <GL/GL.h>」となっているところを「#include <OpenGL/gl.h>」にしないといけないので注意!)


ちなみに、行列計算なんかも改良されているらしい、まぁ厳密に比較してないからよくわからんがね。

6 comments:

匿名 says:
2011年4月20日 23:23

この記事を参考にしてビルドしてみたんですが、ユニバーサルでビルドできてない(i386で使えない)気がするんですけど、どうですか?

@yosilove says:
2011年4月21日 6:54

詳しい状況が把握できないので、あくまで可能性になりますが。

- 「使えない」が「コンパイルはできるが実行時にウィンドウが表示されなかったりする」なら。
とりあえずQtをはずしてみてください。(「-DWITH_QT=OFF -DWITH_QT_OPENGL=OFF」)

-これを使ったプログラムが「fileコマンド等でi386になってない」という意味なら
ユニバーサルなライブラリを使っていても、OSX 10.6以上の方はコンパイルオプションを指定しないとx86_64でコンパイルされます。(俺だけ?)
このOpenCVを使うプログラムで「-arch i386」というオプションをつけてコンパイルしてみてください。

- コンパイル中に「なんたらarch i386かんたら」というエラーが出るという意味なら
関連するプログラムがすべてユニバーサル対応になっている必要があります。
ffmpeg/Qt/CUDAがユニバーサルでコンパイルされているか確かめてみてください。

- 「エラーやワーニングは出ないけどなぜかユニバーサルになってない」なら
私が使っているのは12/8時点の開発版(アルファ版)のOpenCVです。
安定版と違い細かい仕様がコロコロ変わるので現状の最新版とは違うかもしれません。
(コンパイルオプションが変わっている可能性があります)

今はテストできない状況おかれているので、申し訳ありませんが後日報告させてください。
可能ならばコメントのように思われた理由(ユニバーサルかどうかの確かめ方)を教えていただけると助かります。

私の試し方としましては
このOpenCVを使ったプログラムを「-arch i136」としても「-arch x86_64」としてもコンパイル出来ることを確かめてあります。

匿名 says:
2011年4月23日 2:34

丁寧な回答ありがとうございます。

「使えない」はコンパイルもできないという意味でした。


OpenCVライブラリをビルドする際に
http://www.randomsequence.com/articles/opencv-snow-leopard/
のサイトのようにQt関連をoffかつxcodeを利用したビルドだとユニバーサルバイナリが作成されました。が、できればQtを使いたいですね汗。

ユニバーサルかどうかの確かめ方はfileコマンドで生成されたOpenCVライブラリ自体を確かめました。
開発環境はQt CreatorですがプロジェクトファイルにCONFIG += x_86として64bitではビルドされないようにしているつもりです。CUDAはOFFにしてありますし、Qtもユニバーサルです。多分ffmpegがユニバーサルでなかったのでそれが原因だと思いますが、なぜQtをoffにすると通るのかよくわかりません。

@yosilove says:
2011年4月23日 3:32

Qtでしたか、、、そちらは私もよくわかっていなかったのではっきりとはわかりませんが。。。

おそらくですが、Qt Creatorを使わないで、Terminalで記事のとおりにするとOpenCVをコンパイルするとうまくいかもしれません。
というのも、私は当時Qtというのを何も分かっておらず(普通のライブラリだと思ってました(汗 )、この記事でのOpenCVのコンパイルにもQt Creatorは使わず、Tearminalだけだった(はず)だからです。

*qmakeの存在に気づいたのは翌日で、Qt機能を使うOpenCVのプログラム自作時にはQt Creator使いました。
(http://yosilove.blogspot.com/2011/01/macosx-qt.html)

とはいえ、
私の環境(SnowLepard 64biカーネルでの起動)ではQtを利用するOpenCVのコンパイルまでは出来ていましたが、Qtをいれたままにすると実行時に画面が白飛びしたり、数分でカメラ画像の取り込みエラーが発生するなど怪しい挙動をしていました。おそらく設定不良でしょう・・・
それくらいQtについてよくわかっていない人なので、今回の方法が正しいのかどうかは不明です。

あまりお役に立てず申し訳ございません。。。

ちなみに、記事のオプションでは「ffmpegを必ず利用」は付いておらず、自動検出になっています。
Qtをoffにしただけで通るのはffmpegを見つけきれてないからかもしれません。コンパイルログをご確認ください。

@yosilove says:
2011年4月24日 0:24

[メモ]
OpenCV2.2.0でもう一度試し中。
cmakeのバージョンが変わってオプションのつけ方が変わっていることに気づく。。。
あれ?でも「OSX_ARCHITECTURES」にしてもユニバーサルにならないな?他にも変更があるのかな?

まぁ最悪CXX_FLAGSあたりで「-arch i386 -arch x86_64」すりゃいいか。

@yosilove says:
2011年4月24日 19:03

遅くなりましたが、universal binaryでコンパイルできましたのでご報告いたします。
http://yosilove.blogspot.com/2011/04/macopencv-22.html

コメントを投稿