2013年3月現在、OpenCVの最新バージョンはVer.2.4.4です。
OpenCV2.4.4のダウンロードは下記ページより入手して下さい。
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.4/
また、インストール方法はlibファイルのxxx240.lib,xxx240d.libの部分をxxx244.lib,xxx244d.libに読み替えて下さい。
下記はVer.2.4.0の説明です。
2012.5.1 OpenCV2.4の正式版が公開されました。
OpenCV2.3.1からの変更点は下記リンク先よりご確認下さい。
日本語版は下記を参照下さい。
OpenCV2.3.1→OpenCV2.4betaへの変更点
OpenCV2.4beta→OpenCV2.4への変更点
インストール上で気になるポイントは
●SURFおよびSIFT処理の特許が申請されている処理アルゴリズムは別のモジュール(opencv_nonfree240.dll)へ移動
●OpenCVで使用している並列化ライブラリ(TBB)がOpenCVのパッケージに同梱
注)Release版のTBBのみ、Debug実行する場合は別途TBBを入手する必要があります。
ぐらいでしょうか。
以下、Windows版のインストール方法について記します。
OpenCV2.4の入手、ダウンロード先
OpenCVの入手は下記ページよりダウンロードして下さい。
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.0/
上記リンク先へ行き、OpenCV-2.4.0.exeをクリックしてファイルをダウンロードして下さい。
OpenCV2.4のインストール方法
ダウンロードしたファイル(OpenCV-2.4.0.exe)をダブルクリックすると、ファイルの解凍が始まるので、ここでは c:\ に解凍する事にします。(慣れている人はどこでも構いません。)
Extract to:の部分に c:\ と入力して下さい。
ファイルを解凍すると、主な構成は下記のようになっています。
c:\opencv
┣ 3rdparty
┣ android
┣ build
┃┣ common
┃┃ ┗tbb
┃┃ ┣ ia32
┃┃ ┗ intel64
┃┣ gpu
┃┣ include
┃┣ python
┃┣ x64
┃┃ ┣mingw
┃┃ ┣vc9
┃┃ ┗vc10
┃┗ x86
┃ ┣mingw
┃ ┣vc9
┃ ┗vc10
┃ ┣bin
┃ ┣lib
┃ ┗staticlib
┣ data
┣ doc
┣ include
┣ module
┗ samples
次にダウンロードしたdllファイルをPCから使えるようにPathの設定というのを行います。
Pathの設定はWindowsのスタートボタンをクリック → コンピュータを 右クリック → プ ロパティをクリックします。
開いたウィンドウの システムの詳細設定 をク リックします。
次に詳細設定タブの環境変数のボ タンをクリックします。
次にシステム環境変数のPathを選択し、編集をクリックします。
変数値のテキストボックスの最後の部分に、OpenCVのdllファイルのあるフォルダを指定します。
また、別途OpenCVからTBBというライブラリも使用するので、この2つのPathを設定します。
32bitプログラムでVisualStudio2010を使用する場合は
;C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10
※もともとあった文字は消さないようにご注意ください。
最初の ; (セミコロン)を付けるのもお忘れなく。
PATHの設定後、PCを再起動して下さい。(ログオフ⇒ログインでも可)
別の環境にOpenCVをインストールする場合は下記の表を参考に
使用する環境に合わせてディレクトリを指定して下さい。
32bit、Visual Studio2008の場合 | ;C:\opencv\build\x86\vc9\bin;C:\opencv\build\common\tbb\ia32\vc9 |
32bit、Visual Studio2010の場合 | C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10 |
64bit、Visual Studio2008の場合 | C:\opencv\build\x64\vc9\bin;C:\opencv\build\common\tbb\intel64\vc9 |
64bit、Visual Studio2010の場合 | C:\opencv\build\x64\vc10\bin;C:\opencv\build\common\tbb\intel64\vc10 |
ただし、同梱されているTBBはRelease版のみのため、Debug実行すると
コンピュータにtbb_debug.dllが無いため・・・
と表示されてしまします。
Debug実行も行う場合は、別途TBBをこちら
http://threadingbuildingblocks.org/file.php?fid=77
のページの最新版をクリックし、Windowsの場合は tbb×××_win.zipのファイルをダウンロードし、解凍したdllファイルを上記で指定したフォルダの中へコピーして下さい。
64bitOSを使っていても32bitでプログラムする場合は x86 フォルダ内のbinディレクトリを指定して下さい。
64bitを使う場合は、VisualStudioのプラットフォームをx64にして下さい。
(Visual Studioの上の方(メニューの下)に表示されているWin32の部分をx64にして下さい。)
なんだか良く分からない場合は、OSが64bitであっても、32bit版のOpenCVを使った方がハマりにくいと思います。
VisualStudio2010での使用方法
使用するのはVisualStudio C++ 2010 Express以上のエディションで大丈夫です。
VisualStudio2010を起動し、新しいプロジェクトをクリックし、左側のメニューのWin32を選択した状態でWin32コンソールアプリケーションをクリックします。
適当な名前を付け、保存する場所を指定し、OKボタンをクリックします。
すると下記のようなソースコードが表示されます。
// OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
次にOpenCVのヘッダファイルが、今回作成したプロジェクトから参照できるように設定を行います。
プロジェクトの名前の部分を右クリックし、メニューのプロパティを選択します。
表示されたウィンドウ左上の構成を全ての構成にし、構成のプロパティ⇒C/C++⇒全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv\build\include)を追加のインクルードディレクトリに指定します。
以上の設定を行い、ソース部分を下記のようにすると、ガウシアンフィルタ処理を行う簡単なサンプルプログラムが実行できると思います。
// OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// opencv2のあるフォルダ『C:\OpenCV\include』などを追加のこと
#include "opencv2\opencv.hpp"
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts240d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video240d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts240.lib")
#pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video240.lib")
#endif
int _tmain(int argc, _TCHAR* argv[])
{
//画像データの読込
IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_img == NULL){
return 0;
}
//表示ウィンドウの作成
cvNamedWindow("src");
cvNamedWindow("dst");
//処理後画像データの確保
IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);
//画像処理例(ガウシアンフィルタ)
cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);
//画像の表示
cvShowImage ("src", src_img);
cvShowImage ("dst", dst_img);
//キー入力待ち
cvWaitKey (0);
//全てのウィンドウの削除
cvDestroyAllWindows();
//画像データの解放
cvReleaseImage(&src_img);
cvReleaseImage(&dst_img);
return 0;
}
上記サンプルは32bitでVisualStudio2010で開発する場合の設定です。
環境が異なる場合は #pragma comment の部分のパスを環境に合わせて変更して下さい。
ちなみに、libファイルは全て必要ではなく、おおむね
opencv_core240、opencv_imgproc240、opencv_highgui240、opencv_objdetect240
の4種類ぐらいである程度動作すると思います。(使用する関数によって必要なlibファイルが決まります。)
SIFTもしくはSURFを使用する場合は、別途、
Releaseの場合:opencv_nonfree240.lib
Debugの場合 :opencv_nonfree240d.lib
が必要となります。
また、libファイルのファイル名に含まれる数字部分がOpenCVのバージョンを示し、ファイル名の最後についているdの文字がDebug用のlibファイル、dの無いファイルがRelease用のlibファイルとなっています。
その他
VisualStudio2005でOpenCV2.4を使用する場合は自分でOpenCV2.4をコンパイルするか、
VisualStudio2008用のライブラリを使用する場合は
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
VisualStudio2010用のライブラリを使用する場合は
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
が必要となります。ただし、VisualStudio2005からはReleaseモードのみ実行可能なので、Debugモードでも実行したい場合はExpress Editionでも構わないのでVisualStudioをインストールすると実行可能です。
OpenCV2.4でCMakeを使って自分でOpenCVをコンパイルする場合は、OpenCV2.3の場合の説明ですが、下記ページを参照下さい。
https://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/#compile-opencv
基本的にOpenCVなどのライブラリを使う場合は、ライブラリの3点セット(*.dll、*.lib、*.h)をいかに使うか?がポイントになります。
余裕のある方は下記ページも参考にしてみて下さい。
トラブルシューティング
●「コンピュータにopencv_core240d.dllがないため、プログラムを開始できません。・・・」と表示される。
このエラーメッセージはdllの参照設定が正しくできていない可能性があります。
Pathの設定を確認し、設定したらPCの再起動をしてみて下さい。
コンピュータにtbb_debug.dllが無いため・・・と表示されている場合はTBBのライブラリ(*.dll)のdebug版のファイルを入手し、指定したPathへdllファイルが入っているか?Pathの設定が正しいか?deご確認下さい。
●error LNK2019: 未解決の外部シンボル・・・と表示される。
この未解決のシンボルのエラーの場合、libファイルの設定が不足している場合が考えられます。
libファイルの参照設定が正しいか?(本記事では、ソースコード中に記載した#pragma commentの部分)をご確認下さい。
●fatal error C1083: include ファイルを開けません。と表示される。
ヘッダファイルの参照設定が正しくない可能性があります。
プロジェクトのプロパティで構成のプロパティ⇒C/C++⇒全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv\build\include)を追加のインクルードディレクトリに指定しているか?ご確認下さい。※includeというフォルダが2か所あるのでご注意下さい。
●Visual Studio Expressで64bit対応するには?
Expressでは標準的には64bitプログラムを作成することはできないようです。
ただし、SDKインストールすることで可能という情報もあるので、試してみては如何でしょうか?
方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する
コメント
誤植
表示されたウィンドウ右上の構成を全ての構成にし、
→
表示されたウィンドウ左上の構成を全ての構成にし、
確かに...
ご指摘ありがとうございました。
記事も修正しました。
はじめまして。OpenCV1.xにしがみついていいましたが、
(あまり理解していないまま数年が経ちました(汗))
このサイトを参考にOpenCV2.4.0が無事に動きました。
プログラム初学者でも分かりやすい説明ありがとうございました。
コメント頂きありがとうございます。
このへんのインストール方法は私自身が分かっていなかったので、記事にまとめました。
OpenCVのインストールも何回かやると、別のライブラリの使用方法も、そのうち分かってくると思います。
余裕がでてきたら、この辺のページ↓も参考にしてみて下さいね。
http://imagingsolution.net/program/how-to-use-library/
[…] OpenCV2.4の入手、ダウンロード、インストール、環境設定 | イメージングソリューション […]
はじめまして。サイトをもとにVisual c++ 2010 express edition / WindowsアプリケーションフォームでOpenCV2.4.2を使用しようとしています。
OpenCV2.4.2のインストール先:C:\OpenCV242
http://threadingbuildingblocks.org/file.php?fid=77でダウンロードしたTBBのlib、dllは
C:\OpenCV242\opencv\build\x86\vc10\lib
C:\OpenCV242\opencv\build\x86\vc10\bin
にコピーしました。
2.4.2なので、libの参照先を以下のようにしています。
#pragma once
#include “stdafx.h”
#include “math.h”
#include “opencv2\opencv.hpp”
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_core242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_flann242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy242d.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_ts242d.lib”)
#else
//Releaseモードの場合
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_core242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_flann242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_ts242.lib”)
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_video242.lib”)
#endif
現在、DebugモードとReleaseモードで次のようなエラーが発生しており困っています。
解決策わかりますでしょうか。
Debugモード:LINK : fatal error LNK1104: ファイル ‘tbb_debug.lib’ を開くことができません。
Releaseモード:1>opencv_haartraining_engined.lib(cvsamples.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘OpenCV242.obj’ と一致しません。
1>opencv_haartraining_engined.lib(cvcommon.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘OpenCV242.obj’ と一致しません。
1>opencv_haartraining_engined.lib(cvhaartraining.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘OpenCV242.obj’ と一致しません。
1>opencv_haartraining_engined.lib(cvhaarclassifier.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘OpenCV242.obj’ と一致しません。
1>opencv_haartraining_engined.lib(cvboost.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘OpenCV242.obj’ と一致しません。
1>LINK : fatal error LNK1104: ファイル ‘tbb_debug.lib’ を開くことができません。
何卒よろしくお願い申し上げます。
Ackieさん。コメント頂きありがとうございます。
しかしながら、同様のエラーになった事が無いので、推測なのですが、tbbに関しては、OpenCV2.4.2ではtbb_debug.dllも含めてOpenCV2.4.2に同梱されています。
そのため、tbbのライブラリは解凍したフォルダの\opencv\build\common\tbb\ia32\vc10内のファイルをC:\OpenCV242\opencv\build\x86\vc10\binへコピーして使ってみて下さい。
tbbのlibファイルは必要無かったと思います。
また、opencv_haartraining_engined.libなどのエラーに関しては機械学習などの関数をつかっていないのであれば、まずはエラーが出ているlibファイルに関する#pragma commentの部分はコメントアウトしてみて下さい。
以上、よろしくお願い致します。
返信いただきありがとうございます。
Debugモードの
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib”)
と
Releaseモードの
#pragma comment(lib,”C:\\OpenCV242\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib”)
をコメントアウトしたところ、Debugモード、Releaseモードともにエラーがなくなりました。
しばらくはこの状態で、使ってみようと思います。
ありがとうございました。
先日は返信いただきありがとうございました。
再び伺いたいことがございます。
別PCにて、同様の手順でOpenCV2.4.2を設定しようとしたのですが、
問題が発生したため、再度問い合わせさせていただきます。
Debugモード、Releaseモードで共にビルドはできたのですが、
Releaseモードで実行したところ、
”プロシージャ エントリ ポイント ??1task group_context@tbb@@QAE@XZがダイナミック リンク ライブラリ tbb.dllから見つかりませんでした。”
と表示されました。(Debugモードでは問題なく動作します。)
PCのOSは以前(Debugモード、Releaseモードともに)問題なく動作したものは
Windows7 64bit Home premium
今回問題が発生したPCのOSは
Windows7 32bit Professionalです。
解決法わかりますでしょうか。
よろしくお願い申し上げます。
申し訳ありません。私にも難しく...
私なりに調べてみたところ、dllのバージョンの互換性が無い場合に発生する事もあるようなエラーのようですが、tbb関連のファイルはOpenCVに同梱されているファイルをお使いでしょうか?
(的外れなお返事だと、申し訳ありません。)
>tbb関連のファイルはOpenCVに同梱されているファイルをお使いでしょうか?
C:\OpenCV242\opencv\build\common\tbb\ia32\vc10にあるものです。
(ダウンロードしたOpenCV2.4.2.exeに同梱されていたもの)
(回答になっていますでしょうか。)
C:\OpenCV242\opencv\build\common\tbb\ia32\vc10 内のファイルを使っているという事なので、Windows7 32bit でもVisual Studio 2010をお使いという事ですよね?(念のための確認)
あとは、C:\OpenCV242\opencv\build\common\tbb\ia32\vc10 内に入っているファイル全てをPathの設定されているフォルダへコピーしているか?
他にも旧バージョンのPathの設定が残っていないか?などが考えられるでしょうかね?
[…] 5/8 OpenCV2.4の入手、ダウンロード、インストール、環境設定 […]
コメント削除しました。
ちなみに、unicode・・・の部分は私はVisual Studioのみでしかコードを編集した事がないので、良く分からないのですが、インクルードファイル(opencv.hpp)については、opencv.hppの中身(ソースコード)を見ると、なぜ、プロジェクトの設定でC:\opencv2.4\build\includeのフォルダを参照設定するのか?分かると思います。
ダウンロードしたきたOpenCV-2.4.0.exeではGPUライブラリが使えなかったので(GpuMatでエラー)、こちらのサイトのOpenCv2.3のビルドを参考にビルドをしたのですが、エラーになってします。エラーの内容は、まちまちなので書けません。CMakeListだったバラバラです。
またビルドの途中で、”Cmake-Automatically reload and build?”のダイアログが出ます。「はい」を選択して進めているのですが、reloadするとINSTALLのチェックが外れるようで、installディレクトリは作成されません。
私の環境は、
Windows7 Home Premium 32bit
VS 2008 SP1
CUDA 4.1
で、
CMakeの設定はデフォルトに、BUILD_EXAMPLE、EIGEN、WITH_CUBLAS、WITH_TBBを追加しました。
何かアドバイスを頂けたら幸いです。
コメントありがとうございます。
お問合せの内容の部分は、私自身、ほとんど評価できていないので、今回、少し触ってみたのですが、確かにエラーが出るようです。
ビルドに時間がかかるため、まだ、原因特定ができていないのですが、とりあえず、やった事をメモしておきます。何かの参考になれば。
何か分かりましたら、コメント頂けると幸いです。
私の環境
Win7(64bit)、VisualStudio2010Express、CUDA4.2
【OpenCVのコンパイル済み版でやった事】
●opencv_core240(d).libとopencv_gpu240(d).libをGPUフォルダ内の物を参照
●Pathの追加(build\gpu\x86\vc10\bin)
→この状態で、確かにデバッグ実行するとGpuMatでエラーになりました。
【自分でコンパイル】
●CMAKEのCUDAのDIRをCUDA4.2の場所へ変更
●ソリューションファイルを開くと読み込めないプロジェクトがある。
→VisualStudio11Betaでは大丈夫だった。
→Expressが悪いのか?VS2010が悪いのか?分からず。
●とりあえずVS2010でビルドしたOpenCVを使うとGpuMatでのエラーは無くなった?
→他のエラーもある。(namedWindowでWINDOW_OPENGLが使えないなど)
CUDA4.2にしたのは、CUDA4.1のSDKを入れていなかったので、ダウンロードしようと思ったら、CUDA4.2になっていたので、最新版を使ってみただけで、深い意味はありません。
以上、とりあえずの参考まで。
早速、調べて頂いたようで有り難うございます。
ビルドにすごい時間がかかりますよね。私の環境では1モード2時間15分くらいです。
BUILD_EXAMPLEのビルドでエラーになる確率が高い様に感じたので、チェックを外して再度CMakeからやってみました。(2時間きりました。)
結果は、Releaseモードのビルドでopencv_pref_gpuとopencv_test_gpuでエラーがでました。DebugモードはOKでした。
Releaseモードはエラーが出たのでそのまま、ビルドをやり直し(リビルドではなく)ました。やり直しではエラーは出ませんでした。
2.3.1で使ったソースにcv::getBuildInfomationを追加し、Debug/Releaseそれぞれビルドし実行してみました。
元々の処理(グレースケール)は正しく動作したようですが、cv::getBuildInfomationのDebugモードの出力が変でした。
ちょっと長いのですが貼り付けます。
来月には2.4.1が出そうなのと一応動いてそうなので、Exampleのビルドはあきらめます。
2.4.1が出でうまくビルド出来ない時は、また質問させてください。
それからCUDA4.2でも動くのですね。大変参考になりました。
2.4.1が出たらCUDA4.2にしてみます。
どうも有り難うございました。
—————-ここからReleaseモードのgetBuildInfomationの出力————-
General configuration for OpenCV 2.4.0 =====================================
General configuration for OpenCV 2.4.0 =====================================
Platform:
Platform:
Host: Windows 6.1 x86
CMake: 2.8.6
CMake generator: Visual Studio 9 2008
CMake build tool: C:/PROGRA~1/MICROS~1.0/Common7/IDE/devenv.com
MSVC: 1500
C/C++:
Built as dynamic libs?: YES
C++ Compiler: cl
C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /EHs /GR /D _CRT_SECUR
E_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigo
bj /arch:SSE /arch:SSE2 /Oi /fp:fast /wd4251 /MP4 /MD /O2 /Ob2 /D NDEBUG /Zi
Host: Windows 6.1 x86
CMake: 2.8.6
C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /EHs /GR /D _CRT_SECUR
E_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigo
bj /arch:SSE /arch:SSE2 /Oi /fp:fast /wd4251 /MP4 /D_DEBUG /MDd /Zi /Ob0 /Od /R
TC1
C Compiler: cl
C flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPR
ECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:
SSE /arch:SSE2 /Oi /fp:fast /MP4 /MD /O2 /Ob2 /D NDEBUG /Zi
C flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPR
ECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:
SSE /arch:SSE2 /Oi /fp:fast /MP4 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
Linker flags (Release): /STACK:10000000 /machine:X86 /INCREMENTAL:NO
/debug
CMake generator: Visual Studio 9 2008
CMake build tool: C:/PROGRA~1/MICROS~1.0/Common7/IDE/devenv.com
Linker flags (Debug): /STACK:10000000 /machine:X86 /debug /INCREMEN
TAL:YES
MSVC: 1500
OpenCV modules:
C/C++:
To be built: calib3d contrib core features2d flann gpu highg
ui imgproc legacy ml nonfree objdetect photo stitching ts video videostab
Built as dynamic libs?: YES
Disabled by user: –
Disabled by dependency: –
Unavailable: androidcamera java python
GUI:
Win32 UI: YES
C++ Compiler: cl
OpenGL support: NO
C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /EHs /GR /D _CRT_SECUR
E_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigo
bj /arch:SSE /arch:SSE2 /Oi /fp:fast /wd4251 /MP4 /MD /O2 /Ob2 /D NDEBUG /Zi
Media I/O:
C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /EHs /GR /D _CRT_SECUR
E_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigo
bj /arch:SSE /arch:SSE2 /Oi /fp:fast /wd4251 /MP4 /D_DEBUG /MDd /Zi /Ob0 /Od /R
TC1
ZLib: build (ver 1.2.6)
C Compiler: cl
JPEG: build (ver 62)
C flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPR
ECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:
SSE /arch:SSE2 /Oi /fp:fast /MP4 /MD /O2 /Ob2 /D NDEBUG /Zi
C flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPR
ECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:
SSE /arch:SSE2 /Oi /fp:fast /MP4 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
PNG: build (ver 1.5.9)
Linker flags (Release): /STACK:10000000 /machine:X86 /INCREMENTAL:NO
/debug
TIFF: build (ver 42)
Linker flags (Debug): /STACK:10000000 /machine:X86 /debug /INCREMEN
TAL:YES
JPEG 2000: build (ver 1.900.1)
OpenEXR: NO
OpenNI: NO
OpenNI PrimeSensor Modules: NO
XIMEA: NO
OpenCV modules:
Video I/O: DirectShow
To be built: calib3d contrib core features2d flann gpu highg
ui imgproc legacy ml nonfree objdetect photo stitching ts video videostab
FFMPEG: YES (prebuilt binaries)
Disabled by user: –
codec: YES (ver 53.61.100)
format: YES (ver 53.32.100)
util: YES (ver 51.35.100)
swscale: YES (ver 2.1.100)
Disabled by dependency: –
Unavailable: androidcamera java python
GUI:
Win32 UI: YES
OpenGL support: NO
gentoo-style: YES
Media I/O:
ZLib: build (ver 1.2.6)
Other third-party libraries:
JPEG: build (ver 62)
Use IPP: NO
PNG: build (ver 1.5.9)
Use TBB: YES (ver 4.0 interface 6003)
Use Cuda: YES (ver 4.1)
TIFF: build (ver 42)
Use Eigen: YES (ver 3.0.5)
JPEG 2000: build (ver 1.900.1)
OpenEXR: NO
NVIDIA CUDA: (ver 4.1)
Use CUFFT: YES
Use CUBLAS: YES
NVIDIA GPU arch: 11 12 13 20 21
NVIDIA PTX archs: 11 12 13 20 21
OpenNI: NO
NVIDIA GPU features: 11 12 13 20 20 20
Python:
Interpreter: NO
OpenNI PrimeSensor Modules: NO
XIMEA: NO
Documentation:
Build Documentation: NO
Sphinx: NO
PdfLaTeX compiler: NO
Tests and samples:
Tests: YES
Video I/O: DirectShow
Performance tests: YES
FFMPEG: YES (prebuilt binaries)
Examples: NO
Install path: C:/opencv/install
cvconfig.h is in: C:/opencv
codec: YES (ver 53.61.100)
—————————————————————–
format: YES (ver 53.32.100)
util: YES (ver 51.35.100)
swscale: YES (ver 2.1.100)
gentoo-style: YES
Other third-party libraries:
Use IPP: NO
Use TBB: YES (ver 4.0 interface 6003)
Use Cuda: YES (ver 4.1)
Use Eigen: YES (ver 3.0.5)
NVIDIA CUDA: (ver 4.1)
Use CUFFT: YES
Use CUBLAS: YES
NVIDIA GPU arch: 11 12 13 20 21
NVIDIA PTX archs: 11 12 13 20 21
NVIDIA GPU features: 11 12 13 20 20 20
Python:
Interpreter: NO
Documentation:
Build Documentation: NO
Sphinx: NO
PdfLaTeX compiler: NO
Tests and samples:
Tests: YES
Performance tests: YES
Examples: NO
Install path: C:/opencv/install
cvconfig.h is in: C:/opencv
————————————————————–
ReleaseモードではなくDebugモードです。
どうもすいません。
追記ありがとうございます。
getBuildInfomationを出して来るところやOpenCVのロードマップをご存じという事は、そこそこ詳しい方でしょうか?
また、何か情報がありましたら、今後ともよろしくお願い致します。
GPUについては、もう少し調べてみますが、出来るものか???
早速のご指摘ありがとうございました。コーチ部分を修正、無事コードは動きました。
一部の「#include “opencv2\opencv.hpp” など欠落や行重複についてはコピペの際、操作ミスしてそのまま転送したかと…反省。
“#pragma ***” 記述については、よく理解していませんでしたが、少しは呑み込めたかと…努力して次のプログラム追試にあたります。今後ともよろしく。
」
お世話になります。こちらのサイトを訪れ、なんとかOpenCVが動くようになりました。バージョン2.3のライブラリなどの設定は大変参考になりました、感謝します。
現在、2.4バージョンで、cv1.1当時に書かれたコードを追試しています。(参考本:マイコミ社Opencv第2版、1.1対応。1.1preでやってみたのですが、なぜかエラー続出、#pragma記述で追加ライブラリ設定などが簡易なため、2.4使用。)ビルドはMSVisualStudio2010Expressですが、下記のような”メッセージ”が出ます。cppファイルを「Unicode保存」、コードページ1200,1201,65001の3種を其々、Expressで選択してみましたが、表示内容に変わりなし。プログラムが先ずは動けばいい、のレベルなので「fopen問題」は棚上げしています。
改善策などあれば、教えてください。出力メッセージの後段に、コードを一応添付します(支障あるときは削除乞う)。
————————————————————————
1>—— ビルド開始: プロジェクト: tutorial_03, 構成: Debug Win32 ——
1> tutorial_03.cpp
1>c:\opencv2.4\build\include\opencv2\flann\logger.h(66): warning C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : ‘fopen’ の宣言を確認してください。
1>c:\opencv2.4\build\include\opencv2\legacy\compat.hpp : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
1> tutorial_03.vcxproj -> c:\users\yo\documents\visual studio 2010\Projects\cv2.4\cv11\tutorial_03\Debug\tutorial_03.exe
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
// tutorial_03.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include “stdafx.h”
// tutorial_03.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
//———————————————————
// 概要 : 肌色領域を追跡する
// File Name : tutorial_03.cpp
// Library : OpenCV 1.1
//———————————————————
//#include
#include
#include
#include
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_core240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_imgproc240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_highgui240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_objdetect240.lib”)
/* #pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_contrib240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_features2d240.lib”) */
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_flann240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_gpu240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_legacy240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_ts240.lib”)
#pragma comment(lib,”C:\\OpenCV2.4\\build\\x86\\vc10\\lib\\opencv_video240.lib”) */
#define WIDTH 640 // キャプチャ画像の横幅
#define HEIGHT 480 // キャプチャ画像の縦幅
#define THRESH_BOTTOM 10 // 色相値の下限の閾値
#define THRESH_TOP 55 // 色相値の上限の閾値
#define THRESHOLD_MAX_VALUE 255 // 2値化の際に使用する最大値
//int main( int argc, char **argv ) {
int _tmain(int argc, _TCHAR* argv[]) {
int key; // キー入力用の変数
CvCapture *capture = NULL; // ビデオキャプチャ構造体へのポインタ
IplImage *frameImage; // キャプチャ画像用IplImage
//画像を生成する
IplImage *backgroundImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 背景画像用IplImage
IplImage *grayImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // グレースケール画像用IplImage
IplImage *differenceImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 差分画像用IplImage
IplImage *hsvImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 3 ); // HSV画像用IplImage
IplImage *hueImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 色相(H)情報用IplImage
IplImage *saturationImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 彩度(S)情報用IplImage
IplImage *valueImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 明度(V)情報用IplImage
IplImage *thresholdImage1 = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 色相値がTHRES_BOTTOMより大きい領域用IplImage
IplImage *thresholdImage2 = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 色相値がTHRES_TOP以下の領域用IplImage
IplImage *thresholdImage3 = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // thresholdImage1とthresholdImage2のAND演算結果用IplImage
IplImage *faceImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 顔領域の抽出結果用IplImage
char windowNameCapture[] = “Capture”; // キャプチャ画像を表示するウィンドウの名前
char windowNameFace[] = “Face”; // 顔領域抽出結果を表示するウィンドウの名前
// カメラを初期化する
if ( ( capture = cvCreateCameraCapture( 0 ) ) == NULL ) {
// カメラが見つからなかった場合
printf( “カメラが見つかりません\n” );
return -1;
}
// ウィンドウを生成する
cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE );
cvNamedWindow( windowNameFace, CV_WINDOW_AUTOSIZE );
// 初期背景を設定するためにカメラから画像を取得
frameImage = cvQueryFrame( capture );
// frameImageをグレースケール化し、背景画像とする
cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY );
// メインループ
while ( 1 ) {
// captureの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
// frameImageをグレースケール化したものを、grayImageに格納する
cvCvtColor( frameImage, grayImage, CV_BGR2GRAY );
// grayImageと背景画像との差分をとる
cvAbsDiff( grayImage, backgroundImage, differenceImage );
// frameImageをBGRからHSVに変換する
cvCvtColor( frameImage, hsvImage, CV_BGR2HSV );
// HSV画像をH、S、Vに分ける
cvSplit( hsvImage, hueImage, saturationImage, valueImage, NULL );
// 色相が肌色に近い部分を抽出、その部分のみ出力する
cvThreshold( hueImage, thresholdImage1, THRESH_BOTTOM, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY );
cvThreshold( hueImage, thresholdImage2, THRESH_TOP, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY_INV );
cvAnd( thresholdImage1, thresholdImage2, thresholdImage3, NULL );
// 背景差分画像と肌色領域とのANDをとる
cvAnd( differenceImage, thresholdImage3, faceImage, NULL );
//if ( faceImage->origin == 0 ) {
// // 左上が原点の場合
// cvFlip( faceImage, faceImage, 0 );
//}
// 画像を表示する
cvShowImage( windowNameCapture, frameImage );
cvShowImage( windowNameFace, faceImage );
// キー入力判定
key = cvWaitKey( 10 );
if ( key == ‘q’ ) {
// ‘q’キーが押されたらループを抜ける
break;
} else if ( key == ‘b’ ) {
// ‘b’キーが押されたら、その時点での画像を背景画像とする
frameImage = cvQueryFrame( capture );
cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY );
}
}
// キャプチャを解放する
cvReleaseCapture( &capture );
// メモリを解放する
cvReleaseImage( &backgroundImage );
cvReleaseImage( &grayImage );
cvReleaseImage( &differenceImage );
cvReleaseImage( &hsvImage );
cvReleaseImage( &hueImage );
cvReleaseImage( &saturationImage );
cvReleaseImage( &valueImage );
cvReleaseImage( &thresholdImage1 );
cvReleaseImage( &thresholdImage2 );
cvReleaseImage( &thresholdImage3 );
cvReleaseImage( &faceImage );
// ウィンドウを破棄する
cvDestroyWindow( windowNameCapture );
cvDestroyWindow( windowNameFace );
return 0;
}
ビギナーさん。コメント頂きありがとうございます。
ここに張り付けて頂いたサンプルですが、私も新規にプロジェクトを作成し、コード部分をコピペしてみたのですが、多少変更し、動作する事が確認できました。
修正点は、まず、クォーテーション(’)、およびダブルクォーテーション(“)が共に全角となっていました。おそらくその部分がエラーになっていると思うので、半角で入力してみて下さい。
あと、pragma commentの部分ですが、まずはここの記事にある部分をそのまま、#ifdef _DEBUGの部分なども含めてコピペしてみて下さい。ただし、libファイルのパスが異なる場合は、その部分のみ変更して下さい。
あと、#include “opencv2\opencv.hpp”の部分も抜けているので、追加して頂き、プロジェクトのプロパティで構成のプロパティ⇒C/C++⇒全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv2.4\build\include)を設定して下さい。
以上、よろしくお願い致します。
[…] 5/8 OpenCV2.4の入手、ダウンロード、インストール、環境設定 […]
[…] 5/8 OpenCV2.4の入手、ダウンロード、インストール、環境設定 […]