Mac OS X のファイルの拡張属性を消去する - まんぼう日記 からさらにへろへろ度を増したたかたかです.楽しうないけどやらなかん仕事が山積みなんをほっぽり出して,ちょっとだけ逃避.
少し前に OpenCV 3.0.0 が出ましたね.また旧バージョンからあちこち変更になってて,うかつにバージョンアップすると昔のプログラムが動かんようになったりひどい目に遭いそうなんで,様子見してました.特に,SIFT特徴とかSURF特徴がそのままでは使えへん,ってとこが大問題.opencv_contrib というオプショナルなリポジトリを追加することが必要やとか( cf. Install OpenCV 3 on Yosemite ( OSX 10.10.x ) | Learn OpenCV ).
MacPorts で入る OpenCV は既に 3.0.0 になってるものの,opencv_contrib にはまだ対応してません.となると,↑のリンク先に解説されてるように手動でインストールすることになるわけですが,それは面倒くさいからやだ.でも,OpenCV 3 で追加されたあれこれを使いたい.そういうわけで,MacPorts で一手間かけてどうにかする方法を考えてみました.うまくいったような気がするのでメモ.
2015-08-17 追記: いつの間にか opencv の port に contrib という variant が入って,以下の記事のような面倒なことをせずに済むようになりました.続 MacPorts で OpenCV 3.0.0 + opencv_contrib をインストール - まんぼう日記
opencv_contrib のダウンロード
まずは
https://github.com/Itseez/opencv_contrib/archive/3.0.0.zip
から zip ファイルをダウンロードして,適当な所に展開します./hoge/ ディレクトリに展開したら,/hoge/opencv_contirb-3.0.0/ というディレクトリが作られて,その中に README.md というファイルやら modules/ というディレクトリやらができてるはずです.
MacPorts の Portfile を修正して OpenCV 3.0.0 をインストール
次に,上記の opencv_contrib のパスを指定するように MacPorts の Portfile を修正します.
$ sudo port edit opencv
とすると opencv の Portfile がエディタ(環境変数 EDITOR で設定されたもの,設定がないとたぶん vi)で開かれるので,
cmake.out_of_source yes configure.args-append \ -DWITH_1394=OFF \ -DWITH_CARBON=OFF \
という所を見つけて,次のように1行追加します.
cmake.out_of_source yes configure.args-append \ -DOPENCV_EXTRA_MODULES_PATH=/hoge/opencv_contrib-3.0.0/modules \ -DWITH_1394=OFF \ -DWITH_CARBON=OFF \
vi使いじゃない&EDITOR設定してないという人は,
$ port file opencv
で表示される Portfile のパスを見て,自分でエディタで Portfile を開いて修正してもよいはず.
後は,普通に MacPorts でインストールするなり,旧バージョンからアップグレードするなりすればok.インストールの場合は variants をどうするか考えた方がよいですが,この記事では省略.たかたかは 2.4.11 からアップグレードしました.
$ sudo port upgrade opencv
SIFTの動作確認
ちゃんとインストールできたことを確認するため,適当な画像のSIFT特徴をとって表示するプログラムを実行してみます.こんなん.
cv2.COLOR_BGR2GRAY とか,cv2.xfeatures2d.SIFT_create とか,あちこち OpenCV 2 の時代と書き方が変わってるとこがあります.
で,結果はこんなん.無事動きました.
おまけ
OpenCV のドキュメントは更新が追いついてなくて,特に Python の話が全然見つからへんで困ることが多いです.上記のプログラムを書く際も,ネットでいろいろ調べたりしましたが,結局,
>>> import cv2 >>> help(cv2)
して適当なキーワードで検索する,ってのが一番良い方法かもしれません.キーワードは, http://docs.opencv.org/3.0.0/ とかから拾う,と.
ああ,もう夜中…ちょっと逃避のはずが (^^;