質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

opencvでのエラー

yamata
yamata

総合スコア36

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

4回答

0評価

0クリップ

9675閲覧

投稿2016/06/29 06:16

編集2016/06/30 04:37

自作でプログラムを組み、遊んでいたところ次のエラーが出て
実行できなくなりました。
メモリー不足が原因なのでしょうか?

動作環境は、VC++2010Express、opencv2.4.9です。

以下にエラー画像をのせます。

よろしくお願いします。

多くの意見ありがとうございました。

全プログラムをのせます。
アドバイスをいただけたらと思います。
よろしくお願いします。

プログラムとしては、キーを押したら画像を保存して
マッチングを行うことを繰り返すものです。

//静止画像をマッチング改良版(カメラ使用) int main( int argc , char** argv) { int key;//キー入力用の変数 CvCapture *capture;//カメラキャプチャ用の構造体 IplImage *frameImage = NULL;//キャプチャ画像用IplImage char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前 #define LINE_THICKNESS 1 #define LINE_TYPE 8 #define SHIFT 0 IplImage * temp = NULL; IplImage * dst = NULL; IplImage * img = NULL; IplImage * grey_img = NULL; IplImage * grey_temp = NULL; IplImage * output =NULL; IplImage * copy_frameImage = NULL; CvRect rect; double max_inter1inkage=0; double min_inter1inkage=0; CvPoint max_point; CvPoint min_point; //カメラを初期化する if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) { //カメラが見つからなかった場合 printf( "カメラが見つかりません\n" ); return -1; } //Windowの生成 //cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE); //カメラ・デバイスから画像を取得 frameImage=cvQueryFrame(capture); //メインループ while ( 1 ) { //カメラからの入力画像1フレームをframeImageに格納する(画像加工不可) frameImage = cvQueryFrame( capture ); //frameImageをコピー copy_frameImage=cvCloneImage(frameImage); //ROIを用いて短形切り出し //IplImage* image = cvLoadImage("sign.bmp"); //画面中央にROI rect.x = cvRound(copy_frameImage->width * 0.25); rect.y = cvRound(copy_frameImage->height * 0.25); rect.width = cvRound(copy_frameImage->width * 0.2); rect.height = cvRound(copy_frameImage->height * 0.11); //ROI指定 cvSetImageROI(copy_frameImage, rect); //出力先指定 cvCloneImageでROIまるごとコピー output=cvCloneImage(copy_frameImage); //cvSaveImage("test.bmp", frameImage); //ROIを保存 output=cvCloneImage(copy_frameImage); //元の画像をコピー //ROIを表示 cvNamedWindow("Capture",CV_WINDOW_AUTOSIZE); cvShowImage("Capture",output); //画像を表示する //cvShowImage( windowNameCapture, frameImage ); //'q'キーが入力されたらループを抜ける key = cvWaitKey( 1 ); if ( key == 'q' ) { break; } else if( key == 'c') { int64 start = cv::getTickCount();//所要時間計測 cvSaveImage("sign.bmp", output ); //キーを押して保存 //cvNamedWindow("window picture",CV_WINDOW_AUTOSIZE); //cvShowImage("window picture",frameImage); //--------原画像を読み込む--------- img=cvLoadImage("sign.bmp",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //カラー読み込み //---------テンプレート画像を読み込む------- temp=cvLoadImage("temp8.png",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //カラー読み込み //テンプレート・マッチングに用いる相関値データを格納する画像の領域確保 //グレー・スケール画像用に領域確保 grey_img=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) grey_temp=cvCreateImage(cvGetSize(temp),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1); //領域確保 //グレー・スケールに変換して格納 cvCvtColor(img,grey_img,CV_BGR2GRAY); cvCvtColor(temp,grey_temp,CV_BGR2GRAY); //-------テンプレートマッチングを取る----- cvMatchTemplate(grey_img,grey_temp,dst,CV_TM_CCOEFF_NORMED); //-----------マッチング点を求める--------- cvMinMaxLoc(dst,&min_inter1inkage,&max_inter1inkage,&min_point,&max_point,NULL); //------マッチングを表示する----- //相関値0.75以下ならばLostを表示して次に行く if(max_inter1inkage>0.5) { //マッチング箇所を四角で描画 cvRectangle(img,min_point,cvPoint(min_point.x+temp->width,min_point.y+temp->height),CV_RGB(255,0,0),LINE_THICKNESS,LINE_TYPE,SHIFT); //画像を表示 cvNamedWindow("windowNameTemplate",CV_WINDOW_AUTOSIZE); cvShowImage("windowNameTemplate",img); //類似度表示 printf("Detection %lf\n",max_inter1inkage); } else { printf("Lost %lf\n",max_inter1inkage); } //タイマー終了 int64 end = cv::getTickCount(); double elapsedMsec = ( end - start )*1000/cv::getTickFrequency(); //タイマー表示 std::cout << elapsedMsec <<"ms" <<std::endl; } } //メモリ開放 cvReleaseCapture(&capture); cvDestroyWindow("windowNameCapture"); return 0; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。