PC への OpenCV の導入について Version 1.0 Version 1.1 2012 年 9 月 30 日 2012 年 11 月 14 日 プロパティシートの読み込みを追加 FAQ を追加 花泉弘 1. 始める前に いろいろ Blog などに目を通して インストール作業がどのようにな るのか 全体を俯瞰してみましょう 参考になるのは http://volga.esys.tsukuba.ac.jp/~sat/2011/09/opencv-installing-memo/ http://d.hatena.ne.jp/ch3cooh393/20120810/1344577741 http://imagingsolution.net/program/opencv/opencv2-4-dynamic-downlaod-install/ ちょっと微妙な感じ 2. 対応しているかどうかの観点から Win32を選んでください 3. cmake-2.8.9-win32-x86.exe をダウンロード ~\downloads 4. ダブルクリックしてインストールする 5. OpenCV-2.4.2.exe をダウンロード ~\downloads 6. C:\OpenCV242 を作成 7. OpenCV-2.4.2.exe をダブルクリックして展開する 展開先には C:\OpenCV242 を指定する 8. C:\OpenCV242\opencv ができている 9. Code にはバグが含まれているらしいので確認して除去する http://code.opencv.org/issues/2276 include.diff a/modules はここでの例でいうところの C:\OpenCV242\opencv\modules のこと 結局 ここでの修正では C:\OpenCV242\opencv\modules\ calib3d\test\test_affine3d_estimator.cpp C:\OpenCV242\opencv\ calib3d\test\test_chesscorners.cpp C:\OpenCV242\opencv\ gpu\test\precomp.hpp
の 3 つのファイルに #include <functional> を加える 場所は以下の通り diff --git a/modules/calib3d/test/test_affine3d_estimator.cpp b/modules/calib3d/test/test_affine3d_estimator.cpp index 95742a9..9eed8e9 100644 --- a/modules/calib3d/test/test_affine3d_estimator.cpp +++ b/modules/calib3d/test/test_affine3d_estimator.cpp @@ -48,6 +48,7 @@ using namespace std; #include <string> #include <iostream> #include <fstream> +#include <functional> 場所はここ +は書かない 以下同じ #include <iterator> #include <limits> #include <numeric> diff --git a/modules/calib3d/test/test_chesscorners.cpp b/modules/calib3d/test/test_chesscorners.cpp index f6d513d..d692121 100644 --- a/modules/calib3d/test/test_chesscorners.cpp +++ b/modules/calib3d/test/test_chesscorners.cpp @@ -42,6 +42,7 @@ #include "test_precomp.hpp" #include "test_chessboardgenerator.hpp" +#include <functional> #include <limits> #include <numeric> diff --git a/modules/gpu/test/precomp.hpp b/modules/gpu/test/precomp.hpp index afc3be8..5c1c4c1 100644 --- a/modules/gpu/test/precomp.hpp +++ b/modules/gpu/test/precomp.hpp @@ -51,6 +51,7 @@ #include <cstdio> #include <iostream> #include <fstream> +#include <functional> #include <sstream> #include <string> #include <limits> tuple.diff
こちらも同様に C:\OpenCV242\opencv\modules \CMakeLists.txt に直接書き加えてします (cuda は使わないけど ) 元ファイルには 4 行しか書かれていない + のついた行を書き加えるが + 自体は書き加 えない diff --git a/modules/cmakelists.txt b/modules/cmakelists.txt index 4a6ed6d..3c9b567 100644 --- a/modules/cmakelists.txt +++ b/modules/cmakelists.txt @@ -2,4 +2,8 @@ if(not OPENCV_MODULES_PATH) set(opencv_modules_path "${CMAKE_CURRENT_SOURCE_DIR") endif() +if (MSVC) + add_definitions(-d_variadic_max=10) +endif (MSVC) + ocv_glob_modules(${opencv_modules_path) 10. スタート Cmakeと辿って cmake を起動する 11. ソースは C:\OpenCV242\opencv を指定し 出力先は C:\OpenCV242 と指定する 12. 設定したら configure ボタンをクリックする 赤くなったらもう一度 configure ボタンをクリックする ( 赤くなくなるまで何度もクリックする ) 13. 赤が無くなったら generate ボタンをクリックする 14. うまくいったら C:\OpenCV242 の下に OpenCV.sin ができている 15. OpenCV.sin をダブルクリックしてVC2012を起動する この部分は インストールされているVC2010が動くのでも構いません 16. ビルドのタグの下の方の バッチビルド を起動する コンパイラの指定を忘れずに 17. BUILD_ALL の debug と release にチェックを入れてビルドをクリックする 18. どきどきするが どうやら成功するようである 19. 次は vc2012 から opencv の関数を呼ぶための設定です 20. Vc2012 を立ち上げて 空のプロジェクトを新規作成します ( 例えば hosei ) 21. ソリューションエクスプローラ上のプロジェクト名の左側の三角をクリックして展開し ソースファイル ところを右クリックして 追加 新しい項目の追加 と進み 適当な名前でソースファイルを作ります ( 例 :hello_cis.cpp)
22. ソースを打ち込みます #include <stdio.h> int main() { prinf( hello_cis\n ); getchar(); return 0; などがよいでしょう 23. ソリューションエクスプローラ上で プロジェクト名 ( ここでの例では hosei) を 右クリックして 一番下の プロバティ を選択すると hosei プロパティペー ジ が開きます 左上角の 構成 (C) がアクティブ (Debug) になっていることを確 認します 左側の 構成プロバティ を展開します 24. さらに c/c++ を展開して 全般 をクリックすると右側に内容が表示されます 一番上の 追加のインクルードディレクトリ の右側にインクルードファイルの パスを書き込んでいきます OpenCV2012 用のインクルードファイルは C:\OpenCV242\opencv\include と C:\OpenCV242\opencv\modules\ すが 丁寧に設定してやる必要があります ここでの例では の下層にありま C:\OpenCV242\opencv\include\opencv;C:\OpenCV242\opencv\include\opencv2;C:\OpenCV242\o pencv\modules\flann\include;c:\opencv242\opencv\modules\calib3d\include;c:\opencv242\op encv\modules\core\include;c:\opencv242\opencv\modules\features2d\include;c:\opencv242\o pencv\modules\highgui\include;c:\opencv242\opencv\modules\imgproc\include;c:\opencv242 \opencv\modules\legacy\include;c:\opencv242\opencv\modules\ml\include;c:\opencv242\ope ncv\modules\objdetect\include;c:\opencv242\opencv\modules\video\include;c:\opencv242\op encv\modules\contrib\include;c:\opencv242\opencv2;%(additionalincludedirectories) のようになります 適当なエディタ上に打ち込んでから コピー & ペーストして下さい よく考えて自分の環境に合うように変更して打ち込んでください 打ち込んだら右下の適 用 (A) をクリックしておいてください ここでの例では とりあえず使用頻度が高いであろうもののみがリストアップされていま すが すべてのモジュールについては書いてありません めったに使わないものを使うと きには コンパイル時にエラーとなりますから 必要に応じてプロパティマネージャーを 使って必要なモジュールの include を加えてください 初めからすべてをリストアップす るのも一手法ですが モジュール間で競合する例もあるとのことで このようにしていま す 以下のリンカーについても同様です
次は リンカー を展開して その中の 全般 を左クリックします 上と同じように 内容が表示されますので 中ほどの 追加のライブラリディレクトリ の右側に以下のように打ち込みます OpenCV242 用のライブラリファイルは C:\OpenCV242\lib の下層にありますので これを打ち込みます Debug と Release と2 種類あるので 左上角の表示に合わせて Debug と Release とを別々に入力します ここでの例では C:\OpenCV242\lib\Debug;%(AdditionalLibraryDirectories) と C:\OpenCV242\lib\Release;%(AdditionalLibraryDirectories) とを使います 入力後は 適用 (A) をクリックしましょう 25. 同じく リンカー の中の 入力 を左クリックします 追加の依存ファイルに kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib ;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;c:\opencv242\lib\debug\opencv_core242d.lib;c:\opencv242\lib\debug\opencv_highgui242d.lib;c:\opencv242\lib\debug\opencv_ video242d.lib;c:\opencv242\lib\debug\opencv_ml242d.lib;c:\opencv242\lib\debug\op encv_legacy242d.lib;c:\opencv242\lib\debug\opencv_imgproc242d.lib;%(additionaldep endencies) と kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib ;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;c:\opencv242\lib\release\opencv_core242.lib;c:\opencv242\lib\release\opencv_highgui242.lib;c:\opencv242\lib\release\opencv _video242.lib;c:\opencv242\lib\release\opencv_ml242.lib;c:\opencv242\lib\release\o pencv_legacy242.lib;c:\opencv242\lib\release\opencv_imgproc242.lib;%(additionaldep endencies) とを加えます Debug の場合は ~d.lib となっていますが Release の場合 は ~.lib になっていることに注意しましょう また もともと値が入っている場合 には それらの後ろに ; で区切って追加します 入力後は 適用 (A) をクリッ クしましょう 26. ようやく入力が終わりました 次はこの設定を プロパティシート として保存 します 今後新しいプロジェクトを作成するたびに このプロパティシートを導 入することで 面倒な入力を省略できます 27. VC2012 のトップ画面に戻ります 表示 プロバティマネージャー (P) を選 択します プロジェクト名 ( 例 :hosei) が見えるので 右クリックします 入力 したものを保存するので 新しいプロジェクトプロバティ シートの追加 (P) を選択して 保存先を忘れないようにして 保存してください 28. 新しいプロジェクトを作成した場合には 上の操作で 既存のプロパティシート の追加 (E) を選択すればよいのはわかりますね すなわち ソリューションエク スプローラ上で新しく作成したプロジェクトを左クリックして 表示 プ
ロバティマネージャー (P) を選択し 既存のプロパティシートの追加(E) を選択します 29. 最後に システムの環境変数を書き加えます スタート コントロールパネル システム システムの詳細設定 環境変数(N) と辿り 下部の システム環境変数 (S) の中の Path を左クリックし さらに 編集(I) を左クリックして ; で区切りながら ここの例では ;C:\OpenCV242\bin\Rlease;C:\OpenCV242\bin\Debug を書き加えます 先頭の ; は すでに書いてある分につなげるためのものです 再起動などして新しい環境変数を読み込ませれば出来上がりです 30. 以上の操作で 無事 OpenCV を使って開発ができるようになりました 31. それでは OpenCV の動作確認をしてみましょう ソースを打ち込んだら F5 でビ ルドが行われ プログラムが起動します 画像表示 : #include <cv.h> #include <highgui.h> Int main (int argc, char **argv) { IplImage* img; cvnamedwindow("image_display", 1); img = cvloadimage("pict.jpg", 1); // 画像はプロジェクト内のソースと同じ場所に置く if(img == NULL){ printf("tako!!\n"); cvwaitkey(0); exit(-1); cvvshowimage("image_display", img); cvwaitkey(0); cvdestroyallwindows(); cvreleaseimage(&img); return 0; USB カメラ映像の表示 : #include <cv.h>
#include <highgui.h> Int main (int argc, char **argv) { int key; CvCapture *src; IplImage *frame; cvnamedwindow("camera", 1); src = cvcapturefromcam(0); if(src == NULL){ printf("aho!\n"); cvwaitkey(0); exit(-1); while(1){ frame = cvqueryframe(src); cvshowimage("camera", frame); key = cvwaitkey(33); if(key == 'q') break; cvdestroywindow("camera"); cvreleasecapture(&src); return 0; 32. 頑張ってください FAQ Q1. 新しいプロジェクトを作成しましたが プロパティシートを読み込んでも内容が反映されていないようです A1. ソリューションエクスプローラ上で新しく作成したプロジェクトを左クリックして 表示 プロバティマネージャー(P) を選択し 既存のプロパティシートの追加 (E) を選択します これによって 関数などについていた赤い波線が消えるのが観察されます Q2. コンパイル時にエラーが出ます どうやら include ファイルが不足しているようです
A2. ソリューションエクスプローラ上で 使用しているプロジェクト名を右クリックして プロパティ (R) を選択します そのプロジェクトの名前の付いたプロパティページのウインドウが開きますので 左側の C/C++ すべてのオプション と進み 右側で 追加のインクルードディレクトリ に不足しているものを書き加えてください Q3. コンパイル時にエラーが出ます どうやらライブラリの不足のようです A3. ソリューションエクスプローラ上で 使用しているプロジェクト名を右クリックして プロパティ (R) を選択します そのプロジェクトの名前の付いたプロパティページのウインドウが開きますので 左側の リンカー すべてのオプション と進み 右側で 追加の依存ファイル に不足しているものを書き加えてください