画像処理・認識 [画像のロード] [OpenCV]
「HighGUI」技術
画像をディスクからロードする
◆ 画像ファイルを読み込む関数
OpenCV | 関数名 | 書式、コメント |
1.x系 | cvLoadImage | IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ) |
2.x系 | cv::LoadImage | IplImage* cv::LoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR ) |
cv::LoadImageM | LoadImageM(filename, iscolor=CV_LOAD_IMAGE_COLOR) ファイルから,CvMatとして画像を読み込む。 |
読み込む画像のカラーの種類
- CV_LOAD_IMAGE_COLOR 画像は,強制的に3チャンネルカラー画像として読み込む
- CV_LOAD_IMAGE_GRAYSCALE 画像は,強制的にグレースケール画像として読み込む
- CV_LOAD_IMAGE_UNCHANGED 画像は,そのままの画像として読み込む
ファイルフォーマット
- Windows bitmaps - BMP, DIB
- JPEG files - JPEG, JPG, JPE
- Portable Network Graphics – PNG
- Portable image format - PBM, PGM, PPM
- Sun rasters - SR, RAS
- TIFF files - TIFF, TIF
デプスの指定は,読み込まれた画像を,以前のバージョンの OpenCV で行われたように一つのカラーチャンネルに対して 8ビットに変換するか,入力画像のままにしておくかを決める.CV_LOAD_IMAGE_ANYDEPTH が渡された場合に取りうるピクセルフォーマットは, 8 ビット符号無し整数,16 ビット符号無し整数,32 ビット符号付き整数,32 ビット浮動小数点数である.
渡されたフラグが衝突する場合,小さい値を持つフラグが優先される. 例えば, CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR というフラグの場合は, 画像は 3 チャンネルとして読み込まれる. CV_LOAD_IMAGE_ANYCOLOR は,CV_LOAD_IMAGE_UNCHANGED と等価であるが, CV_LOAD_IMAGE_ANYCOLOR には,CV_LOAD_IMAGE_ANYDEPTH と併用できるという利点がある. よって,CV_LOAD_IMAGE_UNCHANGEDは今後利用すべきではない.
出来る限り忠実に画像を読み込みたい場合は, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR を指定する。
[opencv.jp document より引用]
◆ 画像ファイルを書き込む関数
OpenCV | 関数名 | 書式、コメント |
1.x系 | cvSaveImage | int cvSaveImage( const char* filename, const CvArr* image ) |
2.x系 | cv::SaveImage | SaveImage(filename, image) |
[opencv.jp document より引用]
本記事は以下の参考書を元に書いています。
画像処理・認識 [ウィンドウ] [OpenCV]
「HighGUI」技術
ウィンドウ関連の関数群について
◆ スクリーンに画像を表示する関数
OpenCV | 関数名 | 書式 |
1.x系 | cvNamedWindow | int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE ) |
2.x系 | cv::namedWindow | void namedWindow(const string& winname, int flags) |
◆ ウィンドウハンドルの取得
OpenCV | 関数名 | 書式 |
1.x系 | cvGetWindowHandle | void* cvGetWindowHandle( const char* name ) |
2.x系 | cv::GetWindowHandle | void* cv::GetWindowHandle(const char* name) |
◆ ウィンドウ名を取得
OpenCV | 関数名 | 書式 |
1.x系 | cvGetWindowName | const char* cvGetWindowName( void* window_handle ) |
2.x系 | cv::GetWindowName | const char* cvGetWindowName(void* windowHandle) |
◆ ウィンドウのリサイズ
OpenCV | 関数名 | 書式 |
1.x系 | cvResizeWindow | void cvResizeWindow( const char* name, int width, int height ) |
2.x系 | cv::ResizeWindow | void cv::ResizeWindow(const char* name, int width, int height) |
本記事は以下の参考書を元に書いています。
画像処理・認識 [ツールキット] [OpenCV]
「HighGUI」技術
HighGUI (High-level Graphical User Interface) とはOS、ファイルシステム、ハードウェア(カメラ等)とやるとりするライブラリ。ウィンドウを開く、画像を表示する、グラフィック関連ファイルの読書き、さらにマウス、ポインタ、キーボード等のイベント処理を行うことができる。
このライブラリは大きく3つの部分に分けることができる。
① ハードウェア部
主にカメラの操作に関連している。
② ファイルシステム部
主に画像のロードと保存に関連している。
③ ウィンドウシステム部
ウィンドウ関係に関連しており、ウィンドウにかかわるイベント等の処理も行うことができる。
本記事は以下の参考書を元に書いています。
カメラ動画データ1フレームをOpenCV Mat配列にコピーするのに要する時間 [OpenCV]
カメラから画像1フレーム分のデータを取得しWindowに表示するまでの時間を、下記の条件で計測した。
計測条件
◆カメラ仕様
- 解像度: 2592 pixels × 1944 pixels
- フレームレート: 14 fps
- モノクロ
- インターフェース: USB 3.0
◆PC仕様
- プロセッサ: Intel Core i7-3930K CPU 3.20GHz
- RAM: 16.0GB
- OS: Windows 7 Professional
◆開発環境
- 環境: Visual Studio 2010 Professional
- 言語: C/C++
◆計測仕様
- カメラメーカ提供のライブラリを利用しWindowを表示するまでを計測(デフォルト)
- OpenCVで利用するMat形式の変換処理を加えて計測。
- 2項に加えWindow作成をメーカ製からOpenCV用(C++関数)に変更して計測。
計測方法
プロジェクト形式は、C/C++コンソールアプリケーションとし、時間計測は以下の関数を利用して計測。
- QueryPerformanceFrequency(&frequency)
- QueryPerformanceCounter(&start_time)
- QueryPerformanceCounter(&end_time)
結果
計測を10回行い平均値、最大値、最小値を求めた。(単位:秒)
計測条件No | 平均 | 最大 | 最小 |
1 | 0.079 | 0.222 | 0.002 |
2 | 0.268 | 0.403 | 0.223 |
3 | 0.314 | 0.297 | 0.284 |
考察
OpenCV用データ形式への変換処理は大きな配列のコピーとなるため、その処理に多大な時間がかかっている。これは許容できない値であり、何らかの対応が必要となる。
例えば配列の高速コピーを行う方法、コピーしないでOpenCVを利用する方法、それにカメラ側データ処理についての調査等を行う必要がある。
参考サイト
時間計測
- http://soundengine.jp/wordpress/tips/try/67/
- http://www.hiramine.com/programming/windows/timerperformancecomparison.html
OpenCVデータ
- http://ameblo.jp/ns-programming-memo/entry-11229431837.html
- http://d.hatena.ne.jp/jumbo8dekai/20111230/1325229941
- http://d.hatena.ne.jp/sakusan_net/20080626/1214449256
OpenCV 書籍調査(レビューのまとめ) [OpenCV]
◆ 詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
◆ OpenCV プログラミングブック 第2版 OpenCV 1.1対応
◆ OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応
表紙 | |
著者 | 永田 雅人 |
出版社 | カットシステム |
発売日 | 2013/01 |
価格 | 3,990 |
レビュー | この本は初心者にお勧めです。静止画・動画を網羅。Visual C++の MFC でOpenCVのプラグラムを動作させる記述が書かれている珍しい本です。 サンプルプログラムなどはすべてC言語APIを使用されています。 |
◆ OpenCV 2 Computer Vision Application Programming Cookbook
そして本屋で内容を確認し「詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・/オライリージャパン 」を買いました。
これからは、この本の内容について記事を作成していくのでよろしくお願いします。
参考サイト(参考とさせていただいたサイトの運営者様には感謝いたします)
- http://dafuku2.blogspot.com/2011/12/opencv.html
- http://blog.cnu.jp/2010/03/04/opencv/
- http://news.mynavi.jp/articles/2012/01/23/opencv2/index.html
- http://ameblo.jp/okya-application/entry-10333541777.html
- http://iphone.moo.jp/app/?p=1101
- http://y-takeda.tumblr.com/post/42147339236/opencv-book
OpenCVとは [OpenCV]
◆特徴
- オープンソース
- インテルが開発・公開
- 現在はWillow Garageが開発
◆長所
- 簡単
- 移植性が高い
- 無料(BSDライセンス)
◆短所
- 具体的な機能は自分で実装しなければならない
- SHIFTやSURFといったアルゴリズムは特許がとられている
- 権利関係に注意(落とし穴あり)
◆画像処理とは
数学的な処理による画像の変換
- 2値化
- 明るさの調整
- コントラストの調整
- 色成分の抽出
- 色反転
- 拡大縮小
- グレースケール化
- 切り出し
- ぼかし
- ガンマ補正
- 任意角回転
- 鏡像反転
- ノイズ除去
- セピア調化
- 輪郭抽出
- 増殖
◆画像認識とは
コンピュータに視覚を持たせる
- 物体認識(HOG特徴量)
- 顔認識(バイオメトリクス)
- 画像理解(2次元画像から3次元に復元)
- 拡張現実(AR)
- Kinect
- アニメ顔検出
- Oppai-Detect3
◆OpenCVの基本機能
- 行列構造
- 算術・線形代数演算
- 離散フーリエ変換
- XML/YAML入出力
- etc
◆OpenCVの画像処理
- フィルタ
- ガウシアンブラー
- 収縮・膨張
- リサイズ
- リマップ
- 色変換
- ヒストグラム計算
- etc
◆OpenCVの統計的機械学習モデル
- Support vector machine(SVM)
- 決定木
- ブースティング
◆2次元特徴検出
- SHIFT
- SURF
- FAST
◆モーション解析・オブジェクトトラッキング
- オプティカルフロー
- モーションテンプレート
- 背景差分法
◆画像からのオブジェクト検出
- Haar & LBP 顔検出
- HOG物体検出
◆情報サイト
- OpenCV.jp : 日本語訳ドキュメント・サンプル
- OpenCVで学ぶ画像認識 : 特集記事
- OpenCV Wiki : Wiki
以上
参考サイト
OpenCVをC#で使う(OpenCvSharpインストール編) [OpenCV]
OpenCVの対応言語はC/C++、Java、Pythonだけであり、.Netには対応してない。しかしWeb上には.NET(C#)で使うためのラッパーがいくつか存在する。Webで調べたところでは、Emgu CV、OpenCVDotNet、OpenCvSharpの3つを見つけた。
今回、OpenCvSharpを利用することにした。理由は2つある。1つ目の理由は、Emgu CVとOpenCVDotNetの2つはGPLライセンスであること、2つ目の理由はOpenCvSharpの開発者が日本人でありドキュメントが揃っている事である。
1.インストール
以下のサイトから、それぞれの最新版である本体、サンプルおよびマニュアルをダウンロードする。
- OpenCvSharp-2.4.5-x64-20131009.zip
- Sample-2.4.5-20130711.zip
- Documentation-Jp-2.1-20100508.chm / Documentation-Jp-2.1-20100508.zip
https://code.google.com/p/opencvsharp/downloads/list
また詳細は以下の作者のページを参考とします。http://schima.hatenablog.com/entries/2009/06/16#1245081217
インストール作業は特に内容です。ただしVisual C++ 再領布可能パッケージのインストールが必要です。以下の中から自分の環境に合わせてインストールします。
x86
Visual C++ 2010 Redistributable Package (x86)
Visual C++ 2008 SP1 Redistributable Package (x86)
Visual C++ 2005 SP1 Redistributable Package (x86)
x64
Visual C++ 2010 Redistributable Package (x64)
Visual C++ 2008 SP1 Redistributable Package (x64)
Visual C++ 2005 SP1 Redistributable Package (x64)
2.使い方
① Visual Studioのプロジェクトを作成する。
ファイルをすべてプロジェクトにいれる。ファイルを選択しソリューションエクスプローラにドラッグ&ドロップします。
② OpenCvSharpExtension.dllのコピー設定
ソリューションエクスプローラから””を選択し、プロパティから「出力ディレクトリにコピーする」を「新しい場合はコピーする」に編集します。
③ 参照設定
「ソリューションエクスプローラ」の「参照設定」を右クリックし「参照の追加」を選択する。
「参照の追加」のダイアログからすべてのOpenCvSharp関連のDLLを参照に追加します。
ただし、OpenCvSharpExtern.dllのみ参照設定しない。(できない)
3.動作確認
以下のコードを記述し実行する。
以下のエラーが出た場合
① OpenCVのDLLもソリューションエクスプローラに加える。
OpenCVのバージョンを合わせる必要がある。今回の場合、OpenCvSharpのバージョンが2.4.5 64bit版のためOpenCVも下記のサイトから2.4.5 64bit版を入手しDLLをソリューションエクスプローラに加える。
http://opencv.org/downloads.html
このアプリケーションの場合、3つのDLLをソリューションエクスプローラにに加え、すべての「出力ディレクトリにコピー」プロパティを「新しい場合はコピーする」に設定する。
注意点として、ビルドのプラットフォーム設定を「x64」と整合を取る必要があります。
OpenCV、OpenCvSharp、Visual C++ Redistributable Package のバージョンとプラットフォーム、さらにC#のビルドプラットフォームが同じになると正常にプログラムが起動します。
以下のウィンドウが出れば成功です。
以上で「OpenCvSharpインストール編」を終了します。
参考サイト
- http://imagingsolution.net/program/csharp/useopencvbydotnet/
- https://code.google.com/p/opencvsharp/downloads/list
- http://schima.hatenablog.com/entries/2009/06/16#1245081217
3. OpenCVを使って画像処理(アプリ開発編) [OpenCV]
サンプルコード
Webにあったコードを書いて実行してみた。
#include "opencv2\opencv.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
//画像データの読込
IplImage* src_img = cvLoadImage("C:\\OpenCV2.4.6\\opencv\\samples\\cpp\\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;
}
実行画面
ウインドウズ コンソールとオリジナル画像そしてガウシアンフィルタ後の画像が現れます。そして何かキーを押すと終了します。
簡単ですね。デバッグビルドNGで少し悩みましたけど、比較的簡単にここまでたどり着けました。次回はもう少しいろいろなサンプルを動かして動作を理解していくことにします。
参考サイト
2. OpenCVを使って画像処理(ライブラリ登録編) [OpenCV]
ライブラリの登録
OpenCVにかぎらず、ライブラリ(lib)の登録方法に幾つかのやりかたあることが判明したので記録しておく
1.プロパティに登録
一つ目は前回のインストール編で紹介したように、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する方法。
2.ソースコードに記述
二つ目は、ソースコード上に記述する方法。以下のように、Debug/Release版を分けて読み込む方法。
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_calib3d246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_core246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_flann246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ml246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_nonfree246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ocl246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_photo246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_stitching246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_superres246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ts246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_video246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_videostab246d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_calib3d246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_core246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_flann246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engine.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ml246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_nonfree246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ocl246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_photo246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_stitching246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_superres246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ts246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_video246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_videostab246.lib")
#endif
3.プロジェクトに登録
三つ目はVisual Studioのプロジェクトに登録する方法。
開発環境を選ばないことから二番目のソースコードに記述する方法が一般的かと思える。
OpenCVを使って画像処理(インストール編) [OpenCV]
ダウンロード
以下のサイトからWindows版を後、最新版をダウンロードする。現在の最新版は OpenCV-2.4.6.0.exe でした。
http://sourceforge.net/projects/opencvlibrary/files/
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
インストール
ダウンロードしたOpenCV2.4.6.0.exeをクリックし起動する。
[…]ボタンを押してインストール先を指定し、「OK」ボタンを押すとインストールが開始される。それに先立ちインストールフォルダ「C:\OpenCV2.4.6」を作成しておくこと。
環境設定
この状態ではファイルが解凍されただけなので環境設定する。
スタートメニューから「コントロールパネル」、「システム」、「システムの詳細設定」と選択し「システムのプロパティ」を起動する。
ここで「詳細設定」田ぬ、「環境変数」ボタンを押し「環境変数」ダイアログを起動する。
システム環境変数のリストから「Path」を選択し「編集」ボタンを押す。
変数値に以下の2つの値を追加して「OK」ボタンを押す。
C:\OpenCV2.4.6\opencv\build\x86\vc10
C:\OpenCV2.4.6\opencv\build\x86\vc10\bin
コンパイルテスト
Visual Studio 2010から「Visual C++」「Windows フォームアプリケーション」プロジェクトを作成する。
“stdafx.h”に以下のコードを追加。
#include <opencv/cv.h>
#include <opencv/highgui.h>
プロジェクトのプロパティダイアログを起動する。
インクルードディレクトリの設定
「構成プロパティ」「VC++ディレクトリ」「インクロードディレクトリ」、「▼」ボタン、「編集」と選択し「インストールディレクトリ」ダイアログを起動する。
「フォルダ」アイコン、「…」ボタンと選択しディレクトリ選択ダイアログを起動する。
インクルードディレクトリ”C:\OpenCV2.4.6\opencv\build\include”、ライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”を設定する。
共通言語ランタイムサポートを(/clr)へ変更する。
この状態でビルドすると以下のような「未解決の外部シンボルエラー」が発生する。
error LNK2019: 未解決の外部シンボル _cvReleaseImage が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvWaitKey が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvShowImage が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvMoveWindow が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvNamedWindow が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvLoadImage が関数 _main で参照されました。
解決方法は、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する。
今回登録したのは以下の40個のライブラリです。
opencv_calib3d246.lib
opencv_calib3d246d.lib
opencv_contrib246.lib
opencv_contrib246d.lib
opencv_core246.lib
opencv_core246d.lib
opencv_features2d246.lib
opencv_features2d246d.lib
opencv_flann246.lib
opencv_flann246d.lib
opencv_gpu246.lib
opencv_gpu246d.lib
opencv_haartraining_engine.lib
opencv_haartraining_engined.lib
opencv_highgui246.lib
opencv_highgui246d.lib
opencv_imgproc246.lib
opencv_imgproc246d.lib
opencv_legacy246.lib
opencv_legacy246d.lib
opencv_ml246.lib
opencv_ml246d.lib
opencv_nonfree246.lib
opencv_nonfree246d.lib
opencv_objdetect246.lib
opencv_objdetect246d.lib
opencv_ocl246.lib
opencv_ocl246d.lib
opencv_photo246.lib
opencv_photo246d.lib
opencv_stitching246.lib
opencv_stitching246d.lib
opencv_superres246.lib
opencv_superres246d.lib
opencv_ts246.lib
opencv_ts246d.lib
opencv_video246.lib
opencv_video246d.lib
opencv_videostab246.lib
opencv_videostab246d.lib
リリースビルドOKとなりました。しかしデバッグビルドはNGです。以下のエラーがでます。
エラー 1 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvsamples.obj) OpenCV_Test
エラー 2 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvcommon.obj) OpenCV_Test
エラー 3 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvhaartraining.obj) OpenCV_Test
エラー 4 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvboost.obj) OpenCV_Test
エラー 5 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvhaarclassifier.obj) OpenCV_Test
警告 6 warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\LINK OpenCV_Test
エラー 7 error LNK1319: 5 の不一致が検出されました C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\Debug\OpenCV_Test.exe 1 1 OpenCV_Test
先に行った、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する。から以下の2つのライブラリを削除したらビルドOKとなった。この2つライブラリの情報にたどり着けなかったので、無視して開発を進めることにします。
opencv_haartraining_engine.lib
opencv_haartraining_engined.lib
インストール編は以上で終了とします。次回はアプリケーションの開発編とします。
参考サイト
- http://gihyo.jp/dev/feature/01/opencv
- http://vision-ex.blogspot.jp/2013/05/opencv-245-windows-7-64bit.html
- http://claimant.cocolog-nifty.com/blog/2013/04/opencv-245-2b05.html
- http://imagingsolution.net/program/opencv/opencv2-4-dynamic-downlaod-install/