@Konboi memo

主に技術に関してつらつらと。

homebrewでOpenCVが入らない そして。

入ったものの、コンパイルエラーになる... 久しぶりに画像処理をやろうとOpenCVを入れようとしたら色々とハマった。

はじめに

今回は homebrew で opencv が入れられるということなので homebrew でいれてみることに。

$ brew install opencv 

==> Downloading http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2
Already downloaded: /Library/Caches/Homebrew/opencv-2.4.3.tar.bz2
==> cmake -DCMAKE_INSTALL_PREFIX=/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3 -DCMAKE_BUILD_TYPE=None -DCMAKE_FIND_FRAMEWORK=LAS
==> make
3 errors generated.
make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/grfmt_png.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
make: *** [all] Error 2

READ THIS: https://github.com/mxcl/homebrew/wiki/troubleshooting

エラーがでてインストールができず。 opencvを入れるときには必ず一筋縄でわいかない気がするなと思いつつ調べてみると。

--use-llvm オプションをつけると上手くいくらしいのでやってみた。

$ brew install opencv --use-livm

同様のエラーで変わらない。

もう少し調べてみると、

libpngが悪さをしてる?らしいということなので試してみた。

$ brew install opencv -DBUILD_PNG=OFF

が上手くいかない。

うおーーーって思いながら調べてたら、

xcodeのcliツールアップデートしたらいけましたわ!って人がいた。 でも、最近 xcode update したばっかだからアップデート済みだろーなと思って開いてみた。

Xcode -> Preference -> Downloads

そしたら、ありましたわ。

f:id:Konboi:20130108165159p:plain

(写真は既にダウンロード済み)

Command Line Tools

をインストールして、いざインストール!

$ brew install opencv 

==> Downloading http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2
Already downloaded: /Library/Caches/Homebrew/opencv-2.4.3.tar.bz2
==> cmake -DCMAKE_INSTALL_PREFIX=/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3 -DCMAKE_BUILD_TYPE=None -DCMAKE_FIND_FRAMEWORK=LAST -Wno-dev -DWITH_CUDA=OFF -DBUILD_ZLIB=OFF -DBUILD_TIFF=OFF -DBUILD_PNG=OFF -DBUILD_JPEG=OFF -DBUILD_JASPER=OFF -DBUILD_TESTS=OFF -DBUILD_PER
==> make
==> make install
==> Caveats
The OpenCV Python module will not work until you edit your PYTHONPATH like so:
  export PYTHONPATH="/Users/yabuki-ryosuke/local/homebrew/lib/python2.7/site-packages:$PYTHONPATH"

To make this permanent, put it in your shell's profile (e.g. ~/.profile).

いった!!

ということで、試しに ヘッダファイル読み込んで実行してみることにした。

#include "cv.h"
#include "highgui.h"
using namespace std;

int main(int argc, char *argv[])
{

    cout <<  "hello!\n" << endl;
    return 0;
}

このままコンパイルすると、ヘッダファイルがないと怒られるので、ライブラリを指定する。

g++ -I/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv capture.cpp

これでいったなと思ったら,

-[53565]% g++ -I/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv -c -o capture.o capture.cpp                                                                                                                                                       [~/dev/open-cv]
In file included from capture.cpp:1:
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:63:33: error: opencv2/core/core_c.h: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:64:33: error: opencv2/core/core.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:65:39: error: opencv2/imgproc/imgproc_c.h: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:66:39: error: opencv2/imgproc/imgproc.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:67:38: error: opencv2/video/tracking.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:68:45: error: opencv2/features2d/features2d.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:69:35: error: opencv2/flann/flann.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:70:39: error: opencv2/calib3d/calib3d.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:71:43: error: opencv2/objdetect/objdetect.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:72:37: error: opencv2/legacy/compat.hpp: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/cv.h:79:37: error: opencv2/core/internal.hpp: No such file or directory
In file included from capture.cpp:2:
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/highgui.h:47:39: error: opencv2/highgui/highgui_c.h: No such file or directory
/Users/yabuki-ryosuke/local/homebrew/Cellar/opencv/2.4.3/include/opencv/highgui.h:48:39: error: opencv2/highgui/highgui.hpp: No such file or directory
capture.cpp: In function ‘int main(int, char**)’:
capture.cpp:10: error: ‘cout’ was not declared in this scope
capture.cpp:10: error: ‘endl’ was not declared in this scope

どうやら opencv から opencv2 を読みにいけてないらしい。 ひとまず、opencv のディレクトリで

ln -s ../opencv2 ./opencv2

とした。 問題なく(?) コンパイルが通った。 さ、これでムフフなことする準備ができた。

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski Adrian Kaehler
オライリージャパン
売り上げランキング: 63,143