以前OpenCV 2.4.9導入-with CMake という記事を書きましたが、それからバージョンアップが続き、ついに3.1がリリースされました。
またコンパイラもVisual Studio 2015がUpdate1でようやく安定して使い物になるようになりました。
というわけで改めてまとめようかと思います。あ、pythonとか使ったこと無いのでいい加減知識です、当てにしないように。
Visual Studio Update1は入っている前提で話をすすめます。まだの人は
Clang with Microsoft CodeGenがでたので試す - Qiita
C++を始めよう for windows - Qiita
あたりみてがんばってください。
OpenCVとは
ざっというと画像処理に関するプログラミングを超強力にアシストしてくれるライブラリーです。詳細は
http://www.buildinsider.net/small/opencv/01
に譲ります。
目標
- CMakeを使ってWin32、x64両対応できるように導入する
- pythonでも使えるようにする
- TBB, Eigenをなんとなく有効にする
環境
項目 | 内容 |
---|---|
OpenCVバージョン | OpenCV 3.1 |
Visual Studio | Visual Studio 2015 Community Update1 |
ビルド構成 | Win32 or x64 | Debug or Release |
OS | Windows 7 Homr Premium(64bit) |
(任意)pythonの導入
pythonは32bit版と64bit版がありますが、64bit版は罠です。32bit版を使いましょう
64bit版にはnumpyとか無いんです。非公式版はあるけど私の環境では動かなかったし。
-
https://www.python.org/downloads/
にアクセスし、
Windows x86 MSI installerとWindows debug information files
の2つを落とす。今回はpython3.4.4にした。もう一度言うけどx86(32bit)を選ぶんやぞ!たとえマシンが64bit、OSが64bitだとしても! -
python-[version番号].msiをダブルクリックして実行する。
Add python.exe to Path
は有効にしたほうがいいと思う。パスは空白パスとか日本語パス避ければどこでもいいと思うけど自分はデフォルトパスにした。 -
適当にこの辺を管理者権限コマンドプロンプトで実行する。必要かどうかは知らない。
pip install pip --upgrade pip install python-dateutil pip install pyparsing pip install wheel
-
http://sourceforge.net/projects/numpy/files/NumPy/
にアクセスし、最新版(今回は1.10.2)をクリック、numpy-[numpyのversion番号]-win32-superpack-python[pythonのversion番号].exeを落とす。
今回はnumpy-1.10.2-win32-superpack-python3.4.exeを落とした。 そのままの勢いでexeを実行する。なぜpipで入れないかというとどうせ失敗するから。 -
(任意)http://sourceforge.net/projects/scipy/files/scipy/
にアクセスし、最新版(今回は0.16.1)をクリック、scipy-[scipyのversion番号]-win32-superpack-python[pythonのversion番号].exeを落とす。
今回はscipy-0.16.1-win32-superpack-python3.4.exeを落とした。 そのままの勢いでexeを実行する。なぜpipで入れないかというと(ry -
(任意)http://sourceforge.net/projects/matplotlib/files/matplotlib/
にアクセスし、最新版(今回は1.5.0)をクリック、さらにWindowsをクリックして、matplotlib-[matplotlibのversion番号]-cp34-none-win32.whlを落とす。
今回はmatplotlib-1.5.0-cp34-none-win32.whlを落とした。 -
(任意)管理者権限コマンドプロンプトで以下のように実行する。
cd [落とした場所] pip install matplotlib-[matplotlibのversion番号]-cp34-none-win32.whl
- 最初に落としたpython-[version番号]-pdb.zipを解凍し、python.exeがあるフォルダに新たに「symbols」とかフォルダ作ってそこに中身を全部入れる
pythion3 Debug Buildについて
なおここまでやって作れるのは32bitのRelease buildだけです。Debugビルドは
fatal error LNK1104: cannot open file 'python34_d.lib'
と怒られます。かと言って自力でpythonをビルドするのは至難の業でして、諦めるが吉でしょう。
頑張りたい人は
http://p-nand-q.com/python/building-python-27-with-visual_studio.html
http://stackoverflow.com/questions/17028576/using-python-3-3-in-c-python33-d-lib-not-found
を参考に。私はやりたくない。
CUDA
CUDAを使うにはCUDA Toolkit 7.5を落とすわけですが、これについてくるNsight Visual Studio Edition、Visual Studio 2015に対応してないんですよね・・・。はよう8.0こい。
doxygen
doxygenといえばJavaでいうJavaDocに相当し、ドキュメント生成で有名なツールですね。OpenCVのdocumentはオンラインでも読めますが、オフラインで読めたほうがいいので導入しましょう
-
http://www.doxygen.jp/
にアクセスする - ダウンロードを押す
- A binary distribution for Windowsの64-bit versionのftpまたはhttpをクリックしてDLします
- 適当な場所に解凍します。今回はD:\Program1に
- doxygen.exeのあるディレクトリにPATHを通す。
さすがにPATHの通し方なんて書かなくても大丈夫だよね・・・?コマンドプロンプトで
doxygen --version
として落としたバージョンが表示されれば成功です。
DL & 解凍編
-
CMake
https://cmake.org/download/
より。Latest ReleaseのWindows ZIPを落しましょう。今回はcmake-3.4.1-win32-x86.zip。
そういえばCMakeってURL変わりましたね。 -
OpenCVのソースコード
https://github.com/Itseez/opencv/releases
よりSource code (zip) を。今回はOpenCV 3.1のSource code (zip)を落しました。 -
(任意)opencv_contrib
https://github.com/Itseez/opencv_contrib/releases
よりzipを。今回は3.1.0のzipを落しました。先のOpenCVと同じバージョンを使いましょう -
(任意)Intel(R) TBB
https://www.threadingbuildingblocks.org/download
よりWindows* OSをクリックしてDL -
(任意)Eigen
http://eigen.tuxfamily.org/index.php?title=Main_Page
より。Get itの latest stable releaseのzipをクリックしてDL
全部解凍する。CMake以外は同じパスにおいたほうが便利じゃないかな。ってことでC:\lib以下においています。
CMake編(32bit)
以下説明の都合上、
OpenCV | C:\lib\opencv-3.1.0 |
opencv_contrib | C:\lib\opencv_contrib-3.1.0 |
Eigen | C:\lib\eigen-eigen-b30b87236a1b |
Intel(R) TBB | C:\lib\tbb44_20151115oss |
cmake-gui.exe | D:\Program1\cmake-3.4.1-win32-x86\bin |
python.exe | C:\Python34 |
にあるとします。適宜パスはよみかえてください。
- cmake-gui.exeを起動する
-
以下のように入力し、configureをclickする
Where is the source code C:\lib\opencv-3.1.0
Where to build the binaries C:\lib\opencv-3.1.0\build
- フォルダを作成するか聞いてきたらyesと答える
- とりあえず32bit向けのbuildがしたいので、「Visual Studio 14 2015」を選ぶ。64bit向けには、「Visual Studio 14 2015 Win64」を。
-
しばらく待つと、エラーが出るが、気にしない。OKを押す
- searchにexamと打つと「BUILD_EXAMPLES」という項目があるので、チェックする
- WITH_CUDAは必ずOFFにする!理由は前述のとおり。
-
searchにextと打つと「OPENCV_EXTRA_MODULE_PATH」があるので、
C:\lib\opencv_contrib-3.1.0\modules
とうち、下のサジェストをクリックする。こうすることで'\'(バックスラッシュ)が'/'に置き換わる。 - searchにtbbと打つと、「WITH_TBB」があるので、チェックを付ける
-
searchにeiと打つと、「Eigen_INCLUDE_PATH」があるので、
C:\lib\eigen-eigen-b30b87236a1b
とうち、下のサジェストをクリックする。こうすることで'\'(バックスラッシュ)が'/'に置き換わる。 - searchにpyと打つとpython関連の設定項目が出てくる。以下のように設定する。
- configureをクリックする
- なんかエラーが出るのでOKする
-
TBB_INCLUDE_DIRSに
C:\lib\tbb44_20151115oss\include
とうち、下のサジェストをクリックする。こうすることで'\'(バックスラッシュ)が'/'に置き換わる。
そしてconfigureをクリックする -
searchにtbbと打つと「TBB_LIB_DIR」があるので、
C:\lib\tbb44_20151115oss\lib\ia32\vc14
とうち、下のサジェストをクリックする。こうすることで'\'(バックスラッシュ)が'/'に置き換わる。
ia32
のところは、64bitビルドの時はintel64
にするように!
そしてconfigureをクリックする - generateをクリックする
Build編(32bit)
CMake編(64bit)
CMakeは前回の時のcacheが残るので、fileからdelete cacheする
基本的にはCMake編(32bit)と同じだけど、pythonは64bitでビルドする意味がわからないので(numpyの関係上)、
BUILD_opencv_python3とINSTALL_PYTHON_EXAMPLES
のチェックを外す。
TBB_LIB_DIRの設定は、ia32
のところは、64bitビルドの時はintel64
にするのをお忘れなくように!
Build編(64bit)
Build編(32bit)と全く同じなので割愛
dllとかとか配置編
一般にはPATHを通すようですが、今回はそうしません。
コピー元 | コピー先 |
---|---|
C:\lib\opencv-3.1.0\build\install\x86\vc14\bin | C:\Windows\SysWOW64 |
C:\lib\tbb44_20151115oss\bin\ia32\vc14 | C:\Windows\SysWOW64 |
C:\lib\opencv-3.1.0\build\install\x64\vc14\bin | C:\Windows\System32 |
C:\lib\tbb44_20151115oss\bin\intel64\vc14 | C:\Windows\System32 |
こんな感じでコピーしてくだい。dllだけでいいですが、面倒なら全部いれてかまいません。間違えやすいので注意!
python版のインストール
まず先ほどまでの手順で
C:\lib\opencv-3.1.0\build\lib\python3\Release
にcv2.pyd
があるはずなので確認してください。
さらに、
C:\Python34\Lib\site-packages
をみると、すでにcv2.pyd
がコピーされています。マジ有能。
コピー元 | コピー先 |
---|---|
C:\lib\opencv-3.1.0\build\install\x86\vc14\bin | C:\Python34\Lib\site-packages |
C:\lib\tbb44_20151115oss\bin\ia32\vc14 | C:\Python34\Lib\site-packages |
こんな感じでコピーしてくだい。dllだけでいいです
python版の確認
python
とコマンドプロンプトに打ってインタープリタを立ち上げ、import cv2
とか、cv2.__version__
とかしてあげてください。
C:\Users\yumetodo>python Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.1.0' >>> exit()
あとは、C:\lib\opencv-3.1.0\build\install\samples\native\python
にある、browse.pyとかを走らせても楽しそうです。
previwウィンドウでマウスを動かすとマウス周辺の拡大図がzoomウィンドウに表示されます。
Visual Studioのプロジェクト設定&Sample実行編
-
構成:すべての構成
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→C/C++→全般→追加のインクルードディレクトリに
$(OPENCV_ROOT)/include
を追加、適用を押す -
構成:すべての構成
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→リンカー→全般→追加のライブラリ ディレクトリに
$(OPENCV_ROOT)/$(PlatformTarget)/vc14/lib
を追加、適用を押す -
構成:すべての構成
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→C/C++ー→コード生成→C++の例外を有効にするで
はい-SEHの例外あり (/EHa)
を選択(OpenCVのビルド時と揃える、つまりCMAKEのCMAKE_CXX_FLAGSと同じにする意味がある)
構成プロパティ→C/C++ー→コード生成→浮動小数点モデルで
Fast (/fp:fast)
を選択、適用を押す -
構成:Debug
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集でopencv_core310d.lib opencv_highgui310d.lib opencv_imgproc310d.lib opencv_objdetect310d.lib
-
構成:Release
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→リンカー→入力→追加の依存ファイル→入力欄クリック→右側の下矢印をクリック→編集でopencv_core310.lib opencv_highgui310.lib opencv_imgproc310.lib opencv_objdetect310.lib
という感じで設定したら、適当にサンプルをビルドしてみましょう。
#include <opencv2/core/core.hpp> // coreモジュールのヘッダーをインクルード #include <opencv2/highgui/highgui.hpp> // highguiモジュールのヘッダーをインクルード #include <iostream> int main(int argc, const char* argv[]) { // 1幅320px、高さ240pxで赤色の画像データを生成 cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255)); // 2画像表示用のウィンドウを生成 cv::namedWindow("red", cv::WINDOW_AUTOSIZE); // 3ウィンドウに画像を表示 cv::imshow("red", redImg); // 4キー入力を待機 cv::waitKey(0); // 5作成したウィンドウを全て破棄 cv::destroyAllWindows(); return 0; }