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
そしたら、ありましたわ。
(写真は既にダウンロード済み)
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
とした。 問題なく(?) コンパイルが通った。 さ、これでムフフなことする準備ができた。