以前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
あたりみてがんばってください。
目標
- CMakeを使ってWin32、x64両対応できるように導入する
- pythonでも使えるようにする
- TBB, Eigenをなんとなく有効にする
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関連の設定項目が出てくる。以下のように設定する。
BUILD_opencv_python2 |
チェックしない |
BUILD_opencv_python3 |
チェックする |
INSTALL_PYTHON_EXAMPLES |
チェックする |
PYTHON3_LIBRARY_DEBUG |
C:/Python34/symbols |
- 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)
-
C:\lib\opencv-3.1.0\build
にあるOpenCV.slnを開く
-
下のステータスバーに「準備完了」と出るまでしばらく待つ。私はIntelliSenseの解析は終わらせてからやる派です(ただの趣味)。
-
ビルド→バッチビルドをクリックする
-
INSTALLを探し、Debug/Releaseともにチェクをつけ、ビルドを押す。
-
前述のとおり、opencv_python3のDebug buildに失敗して終了する。
Build編(64bit)
Build編(32bit)と全く同じなので割愛
なくてもいいんだけど、あったほうが楽なので。
OPNECV_ROOT
に、C:\lib\opencv-3.1.0\build\install
を設定。
dllとかとか配置編
一般にはPATHを通すようですが、今回はそうしません。
こんな感じでコピーしてくだい。dllだけでいいですが、面倒なら全部いれてかまいません。間違えやすいので注意!
まず先ほどまでの手順で
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
とコマンドプロンプトに打ってインタープリタを立ち上げ、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ウィンドウに表示されます。
-
構成:すべての構成
プラットフォーム:すべてのプラットフォーム
の状態で
構成プロパティ→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;
}