Visual C++,OpenCVでのリンクエラー
こんにちは。
現在、Microsoft Visual C++ 2010 の環境で、OpenCV(ver2.3.1)を用いて、画像認識のアプリケーションを作ろうと考えています。ただ、Visual C++ 、OpenCV共に扱うのが初めてで、openCVのライブラリーをC++に認識させることができていません。
具体的には、下記の様なエラーが出ます。
「
Sample.obj : error LNK2019: 未解決の外部シンボル _cvReleaseImage が関数 _wmain で参照されました。
(同様に、以下の外部シンボルも参照できていません。_cvDestroyAllWindows、_cvWaitKey、_cvShowImage、_cvSmooth、_cvCreateImage、_cvGetSize、_cvNamedWindow、_cvLoadImage)
」
リンクの設定が上手くできていないと考え、
プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 全般 > 追加ライブラリディレクトリ
に、C:\opencv\build\x64\vc10\lib
というように記入し(64bit環境です)、また、
プロジェクト > ○○のプロパティ > 構成プロパティ > リンカー > 入力 > 追加依存ファイル
に、opencv_core231d.lib;opencv_imgproc231d.lib;opencv_highgui231d.lib;opencv_objdetect231d.lib;opencv_contrib231d.lib;opencv_features2d231d.lib;opencv_flann231d.lib;opencv_gpu231d.lib;opencv_haartraining_engined.lib;opencv_legacy231d.lib;opencv_ts231d.lib;opencv_video231d.lib
を追加しております。
実行しているサンプルファイルは下記になります。
--------------------
// Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// 『C:\OpenCV2.3\include』を追加のこと
#include "opencv2\\opencv.hpp"
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231d.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_core231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_imgproc231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_highgui231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_objdetect231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_contrib231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_features2d231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_flann231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_gpu231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_legacy231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_ts231.lib")
#pragma comment(lib,"C:\\opencv\\build\\x64\\vc10\\lib\\opencv_video231.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;
}
---------------
初心者な質問で大変恐縮ながら、どこを修正すればよいかお分かりでしたら、お教え頂けませんでしょうか?何卒宜しくお願いします。
お礼
度々のご回答ありがとうございます。 本件、昨晩解決し、今朝、質問を削除しようとしていた所です。 あの…リンクエラーの意味わかってます? 確か全社的に、導入するための検証とおっしゃられていましたが、 老婆心ながら、もう少し適任な方がいらっしゃるんじゃないでしょうか。 >#プログラミング未経験者ですか? 一応、すべてある程度理解しているつもりです。確かに適任で無い事は分かっていますが、現状、私がやらないと成らない状態で、ましてや外注を使う事等コスト的に無理な状態です。 >リンクエラーは、関数の実体を参照しようとして、それがないから出るのです。 それが定義されているライブラリを探すことが必要であって、山勘でわけのわからない CHFファイルとかを指定しても、エラーが解消されるわけはありません。 このCHFファイルに関しても、やっとインタープリター型の処理に使うとの記事を見つけ、今回の検討の対象から外しました。 >cvCreateImageというと、cxcoreモジュールの中で定義されているようですから、 cxcore.libをリンクしないと解決しないと思います。 今回のエラーの原因はここで、cxcore.libをリンクしていた積りが、実際にはリンクされて居なかった様です。今回、色々な検討をする為に、libフォルダー内にCV用のフォルダーを作成し、そこにcv関係のlibを入れてパスを設定していたのですが(つもり)、直接すべてプロジェクトに取り込んだ所、動作しました。パスの設定ミスなのか、本来プロジェクトに記載しなければ成らなかったものなのかはこれから調べてみます。 >それから、tutorial_02.cppはいったいどれをダウンロードしたら入っているんでしょうか? opencv-win/1.0/OpenCV.exeとchopencv-2.5.0-win-binary.zip には少なくとも入っていませんでした。 これは以下のURLのcv_prog.zipの中から拾って来ました。その点では質問文は正しくありませんでした。色々な所から情報を集めた為、自分自身でも混乱していました。失礼しました。 従ってこのサンプルもV1.0用のものかは分からなくなりました。現実にこのサンプルのうち、4プログラムに関してはコンパイル、及び実行出来ていますが、残りのサンプルについては同じエラーが発生していますので、これからV1.0に書かれているサンプルのみで動作確認してみます。 http://book.mycom.co.jp/support/bookmook/opencv/ 色々、ありがとう御座いました。