アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境はVidualStudio2008、OpenCVは2.1のバージョンを利用しています。
OpenCVのテンプレートマッチングのサンプルを利用したところエラーが発生しました。
ソースは以下のものを使っています。
ところどころに入っているprintfは私が自分で入れたものですがこれが原因であるとは考えにくいのです。
エラーは添付したような画像で現れます。
またデバッグしたところ

[下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれたシンボルはありません。]
KernelBase.dll!76b7b9bc()

このような文章も表示されました。
どうすれば解決できるでしょうか。

#include <cv.h>
#include <highgui.h>


int main (int argc, char **argv)
{
double min_val, max_val;
CvPoint min_loc, max_loc;
CvSize dst_size;
IplImage *src_img, *tmp_img, *dst_img;

argv[1]="○○";
argv[2]="○○";
argc=3;
printf("1complete\n");

cvNamedWindow ("Image", 1);
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR);
tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR);
if(argc != 3 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR))==0||(tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR))==0)
return -1;
printf("2complete\n");

// (1)探索画像全体に対して,テンプレートのマッチング値(指定した手法に依存)を計算
dst_size = cvSize (src_img->width - tmp_img->width + 1, src_img->height - tmp_img->height + 1);
printf("2-1complete\n");
dst_img = cvCreateImage (dst_size, IPL_DEPTH_32F, 1);    //ここで動作停止
printf("2-2complete\n");
cvMatchTemplate (src_img, tmp_img, dst_img, CV_TM_CCOEFF_NORMED);
printf("2-3complete\n");
cvMinMaxLoc (dst_img, &min_val, &max_val, &min_loc, &max_loc, NULL);
printf("3complete\n");

// (2)テンプレートに対応する位置に矩形を描画
cvRectangle (src_img, max_loc, cvPoint (max_loc.x + tmp_img->width, max_loc.y + tmp_img->height), CV_RGB (255, 0, 0), 3);
printf("4complete\n");
cvShowImage ("Image", src_img);
printf("ALL COMPLETE!\n");
cvWaitKey (0);
cvDestroyWindow ("Image");
cvReleaseImage (&src_img);
cvReleaseImage (&tmp_img);
cvReleaseImage (&dst_img);
return 0;
}

「OpenCVでサンプルコードを使うとエラ」の質問画像

A 回答 (3件)

もとのコードってこれですよね?


http://opencv.jp/sample/matching.html#template

> ところどころに入っているprintfは私が自分で入れたものですがこれが原因であるとは考えにくいのです。
ってあるけど、

> argv[1]="○○";
> argv[2]="○○";
> argc=3;

ここも足したでしょ。
    • good
    • 0

#1 に同意... というか, 「大丈夫」以前に, なぜ argv[1] や argv[2] を変更しようと思ったのかが謎.

    • good
    • 0

argv[1]とargv[2]に値を代入しているようですが、これ、大丈夫なのかなぁ?


(メモリを破壊してないかな)

#ifdef DEBUG
char* arg_dummy[] = {"img1", "img2"};
argc = 3;
argv = arg_dummy;
#endif

のようにしておいて、動作検証が済んだら、上記を無効にすれば良いと思います。
もしくは、Visual C++の構成プロパティ→デバッグのコマンド引数に、ファイル名を渡すようにするとか。
    • good
    • 0

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