MATLABでOpenCVを動かすmexopencvの環境構築
MATLABでOpenCVを使えるようになるmexを使ったOpenCVのラッパー、mexopencvがあります。 mexopencv - Matlab mex functions for OpenCV
非常に便利なのですが、導入の際に少し手間取ったのでメモを残しておきます。
こちらの環境は MacOSX Yosemite、MATLAB 2013a Studentsバージョンです。
homebrewで必要な物をインストール
homebrewに関しては他の記事を参照して下さい。
MacOSX - パッケージ管理システム Homebrew - Qiita
まずhomebrewを更新しておきます。
brew update brew upgrade
まずpkg-configをインストール。
brew install pkg-config
続いてOpenCVをインストール。
brew tap homebrew/science brew install opencv
これで必要な物は揃うはずです。
githubからzipをダウンロード
ではmexopencvを導入していきます。
まず下記のGitHubページからzipファイルをダウンロードして展開します。
kyamagu/mexopencv · GitHub
続いてTerminalを開いてmexopencv-masterフォルダに移動し、make
コマンドを実行します。
すると環境によっては以下のエラーが出ます。
make: /usr/local/matlab/bin/mexext: Command not found
MATLABの場所がわかっていないのが原因なので、場所を教えてあげます。
MATLABの場所はMATLAB上でmatlabroot
と入力するとわかるみたいです。
make MATLABDIR=/Applications/ [MATLABの場所]
すると、MATLABのバージョンによってはこんなエラーが出るかと思います。
xcodebuild: error: SDK "macosx10.7" cannot be located.
持ってるMATLABが知っているxcodeのバージョンと実際のxcodeのバージョンが合わないのが原因らしいです。
下記サイトを参考にすると、mexopts.sh
を変更する必要があるとのこと。
Can I use Xcode 5 as my C or C++ compiler in MATLAB 8.1 (R2013a) or MATLAB 8.2 (R2013b)? - MATLAB Answers - MATLAB Central
mexopts.sh
を編集します。MATLAB上で以下のコマンドを実行します。
cd( [matlabroot '/bin'] )
左のファイル一覧に出てくるmexopts.sh
を開いて、10.7をすべて10.10に変更して保存します。readonlyですがoverwriteで上書きします。
(10.10の値はMacのバージョンに合わせます。Yosemiteなら10.10です。Macのバージョンは画面一番左上のアップルマーク
→このMacについて
で確認可能です)
最後にMATLAB上で
mex -setup
を実行します。The options files available for mex are:
と聞かれるので1
と入力してエンターを押して変更完了です。念のためMATLABを閉じておきます。
再度Terminalを開いて、makeしなおして5分ぐらい待って導入は完了です。
make MATLABDIR=/Applications/ [MATLABの場所]
動かしてみる
MATLABを起動して、忘れないうちににmexopencvをaddしておきます。
addpath( [mexopencvの場所] );
続いてmexopencvディレクトリに有るsamples
フォルダ内のSURF_detector
を開いて実行してみます。
するとこんなエラーが表示されました。
Invalid MEX-file --略-- /usr/local/lib/libtiff.5.dylib Referenced from: /usr/local/lib/libopencv_highgui.2.4.dylib Reason: Incompatible library version: libopencv_highgui.2.4.dylib requires version 8.0.0 or later, but libtiff.5.dylib provides version 6.0.0
どうやらMATLABが持つライブラリとOpenCVが使おうとするライブラリのバージョンが異なるようです。公式で紹介されている通り、MATLABでOpenCVを使う場合はTerminalで以下のようにライブラリの使用方法を指定してMATLABを起動する必要があるとのこと。
DYLD_INSERT_LIBRARIES=/usr/local/lib/libtiff.5.dylib /Applications/[MATLAB.app]/bin/matlab &
これで動くようになると思います。