電子書籍の厳選無料作品が豊富!

今、練習でhttp://gihyo.jp/dev/feature/01/opencv/0004こちらのオブジェクト検出器を練習しているのですが

1>------ ビルド開始: プロジェクト: 練習, 構成: Debug Win32 ------
1>gihyo.obj : error LNK2019: 未解決の外部シンボル _cvReleaseHaarClassifierCascade が関数 _main で参照されました。
1>gihyo.obj : error LNK2019: 未解決の外部シンボル _cvHaarDetectObjects が関数 _main で参照されました。
1>C:\Documents and Settings\ユーザー名\デスクトップ\練習2\Debug\練習2.exe : fatal error LNK1120: 外部参照 2 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

エラーが出てしまって先に進めません。

何が悪いのか教えてください。

よろしくお願いします。

プログラムは
#include "cv.h"
#include "ml.h"
#include "highgui.h"


int main(int argc, char* argv[])
{
/* 画像のロード */
char imgfile[] = "Test/IMG_0532.jpg";
IplImage* image = cvLoadImage( imgfile, 1 );

/* オブジェクトのロード */
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( "gihyo_basic2.xml" );

CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* objs;
int i;

/* オブジェクト検出 */
objs = cvHaarDetectObjects( image, cascade, storage, 1.15, 2, CV_HAAR_DO_CANNY_PRUNING );

/* オブジェクト領域の描画 */
for( i = 0; i < objs->total; i++ )
{
/* extract the rectanlges only */
CvRect obj_rect = *(CvRect*)cvGetSeqElem( objs, i );
cvRectangle( image, cvPoint(obj_rect.x,obj_rect.y),
cvPoint((obj_rect.x+obj_rect.width),
(obj_rect.y+obj_rect.height)),
CV_RGB(255,0,0), 3 );
}

/* 画像の表示 */
cvReleaseMemStorage( &storage );
cvNamedWindow ("result", CV_WINDOW_AUTOSIZE);
cvShowImage( "result", image );
cvWaitKey(0);
cvDestroyWindow("result");
cvReleaseHaarClassifierCascade( &cascade );

/* 結果の保存 */
cvSaveImage("result1.jpg", image);
cvReleaseImage( &image );

return 0;
}

A 回答 (1件)

C言語は、コンパイルしてできたオブジェクトファイルや、既にコンパイルしてあるライブラリを、最後に「リンク」という処理をして一つにまとめます。

このとき、必要な関数等が入ったファイルが無いと

> error LNK2019: 未解決の外部シンボル

となります。

対処法は、必要なライブラリを追加することなのですが、その記事の第2回に書いてあります。
http://gihyo.jp/dev/feature/01/opencv/0002
> 今度は,ライブラリへのリンクをはります。

ただし、これはOpenCV 1.0当時のものです。
もし、他のバージョンを使っているのなら、ファイルの位置とかファイル名が変わっているケースがあります。

この回答への補足

回答ありがとうございます。プログラム自体ぜんぜん初心者なのでコンパイル等の情報は勉強になります。紹介してもらった記事もなんとなくで読んでいたのですがそれが大事だったんですね。
ライブラリの登録をいろいろなHPを見て試したらビルドはエラー無く終了したのですがメモリが足りないみたいなエラーが出ますプログラムの読み込みはプロジェクト_右クリック_既存の項目_ダウンロードしたSrcファイルのgiyo.cppを読み込んでビルドしてデバックしました何か他にあるのでしょうか?

Image.exe の 0x7c812afb でハンドルされていない例外が発生しました: Microsoft C++ の例外: cv::Exception (メモリの場所 0x0011ef10)。
がエラーです。

補足日時:2012/04/25 23:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!