opencvのR6010の解決方法
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,297
opencvを用いて、カメラで写真を撮影しその写真に対してテンプレートマッチングを
行うプログラムを作りました。
実行してみると、R6010のエラーがでました。
解決方法を教えていただきたいと思います。
動作環境はVC++2010Express、opencv2.4.9です。
以下にプログラムをのせます。よろしくお願いします。(include部分は省略。)
{
int key;//キー入力用の変数
CvCapture *capture;//カメラキャプチャ用の構造体
IplImage *frameImage;//キャプチャ画像用IplImage
char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前
IplImage * temp = NULL;
IplImage * dst = NULL;
IplImage * img = NULL;
IplImage * grey = NULL;
double max_inter1inkage=0;
double min_inter1inkage=0;
CvPoint max_point;
CvPoint min_point;
CvPoint corner_point;
int counter = 0;
char str[32];
//カメラを初期化する
if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL )
{
//カメラが見つからなかった場合
printf( "カメラが見つかりません\n" );
return -1;
}
//Windowの生成
cvNamedWindow("Show", CV_WINDOW_AUTOSIZE);
//カメラ・デバイスから画像を取得
//frameImage=cvQueryFrame(capture);
//テンプレート・マッチングに用いる相関値データを格納する画像の領域確保
//グレー・スケール画像用に領域確保
//grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
//dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
//メインループ
while ( 1 )
{
//カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
//画像を表示する
cvShowImage( windowNameCapture, frameImage );
//'q'キーが入力されたらループを抜ける
key = cvWaitKey( 1 );
if ( key == 'q' )
{
break;
}
else if( key == 'c')
{
int64 start = cv::getTickCount();//所要時間計測
sprintf_s(str, "sign.bmp", counter++);
cvSaveImage(str, frameImage );
//--------原画像を読み込む---------
img=cvLoadImage("sign.png",0);
//namedWindow("原画像");
//imshow("原画像", src_image);
//---------テンプレート画像を読み込む-------
temp=cvLoadImage("temp.png",0);
//temp=cvLoadImage("temp2.png",0);
//temp=cvLoadImage("temp3.png",0);
//temp=cvLoadImage("temp7.png",0);
//temp=cvLoadImage("temp8.png",0);
//グレー・スケールに変換して格納
//cvCvtColor(img,grey,CV_BGR2GRAY);
//-------テンプレートマッチングを取る-----
//grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
//dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
cvMatchTemplate(img,temp,dst,CV_TM_CCOEFF_NORMED);
//-----------マッチング点を求める---------
cvMinMaxLoc(dst,&min_inter1inkage,&max_inter1inkage,
&min_point,&max_point,NULL);
//------マッチングを表示する-----
//相関値0.75以下ならばLostを表示して次に行く
if(max_inter1inkage>0.75)
{
//座標を見やすく代入(直接代入でもよい)
corner_point=cvPoint(max_point.x+temp->width,
max_point.y+temp->height);
//マッチング箇所を四角で描画
cvRectangle(img,max_point,corner_point,CV_RGB(255,0,0),2);
printf("Detection\n");
}
else
{
printf("Lost\n");
}
int64 end = cv::getTickCount();
double elapsedMsec = ( end - start )*1000/cv::getTickFrequency();
std::cout << elapsedMsec <<"ms" <<std::endl;
}
}
//メモリ開放
cvReleaseCapture(&capture);
cvDestroyWindow("windowNameCapture");
return 0;
}
コード
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
T.Kanno
2016/06/24 14:29
エラーが出ているときの画面イメージや正確な文言が必要だと思います。
あと、コマンドプロンプトからの実行を行っていれば、実行時エラーの詳細が出力されると思いますが、それも合わせて質問に加えるとよいでしょう。
T.Kanno
2016/06/24 14:33
あと、VisualStudio のデバッガでステップ実行するなりで、エラーの発生している場所を特定して、どのAPI呼び出しで発生しているかの情報もあった方が良いでしょう。よほどのプログラムコードの凡ミスでなければ、OpenCV でおこる実行時エラーの原因はAPIに与えるパラメータが不適切なことが多いです。
yamata
2016/06/24 14:46
すいません。解決しました。
PineMatsu
2016/06/28 17:44
解決済みにしてください。