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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

解決済

opencvのエラー解決2

yamata
yamata

総合スコア36

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

4回答

0リアクション

0クリップ

2520閲覧

投稿2016/11/17 05:02

編集2016/11/17 05:58

お世話になっております。何回も申し訳ありません。
エラーの解決方法が分からないため、質問させていただきます。

以下のプログラムを実行したところ、以下の画像のエラーが出ます。
以前は,
imgをカラーで読み込みグレースケールに変換し行っていました。その時はエラーがでませんでした。
しかし、都合上、imgをグレースケールで読み込む必要があり、(背景処理画像がグレースケール)変更を行ったところ、エラー画でました。

解決方法を教えていただけたらと思います。よろしくお願い致します。

動作環境は、opencv2.4.9です。

イメージ説明

#define LINE_THICKNESS 1 #define LINE_TYPE 8 #define SHIFT 0 #define SCALE_X (float)0.2 #define SCALE_Y (float)0.2 #define SCALE_XX 4.0 #define SCALE_YY 10.0 int main( int argc , char** argv) { IplImage * temp_up = NULL; IplImage * temp_side = NULL; IplImage * dst1 = NULL; IplImage * dst2 = NULL; IplImage * scale_img = NULL; IplImage * grey_img1 = NULL; IplImage * grey_img2 = NULL; IplImage * grey_temp_up = NULL; IplImage * grey_temp_side = NULL; double max_inter1inkage=0; double min_inter1inkage=0; double max_inter2inkage=0; double min_inter2inkage=0; CvPoint max_point1; CvPoint min_point1; CvPoint max_point2; CvPoint min_point2; //---------テンプレート画像を読み込む------- temp_up=cvLoadImage("temp_up.png",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //カラー読み込み temp_side=cvLoadImage("temp_side.png",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //カラー読み込み grey_temp_up=cvCreateImage(cvGetSize(temp_up),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) grey_temp_side=cvCreateImage(cvGetSize(temp_side),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) cvCvtColor(temp_up,grey_temp_up,CV_BGR2GRAY); cvCvtColor(temp_side,grey_temp_side,CV_BGR2GRAY); int64 start = cv::getTickCount();//所要時間計測 //------------------------原画像読み込み------------------------------- //IplImage * img= cvLoadImage("C:\\opencv_ICImage\\2016-11-8黒ネジ10本40fps\\Image0090.bmp",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); IplImage * img= cvLoadImage("背景処理.bmp",CV_LOAD_IMAGE_GRAYSCALE ); //-------------------------------------------------------------------------- //変換画像用IplImage scale_img=cvCreateImage(cvSize((int)((float)img->width*(float)SCALE_X), (int)((float)img->height*(float)SCALE_Y)), IPL_DEPTH_8U, 1); //変換 cvResize(img, scale_img, CV_INTER_LINEAR); printf("No float %d\n",img->width); printf("Float %d\n",(int)((float)img->width*SCALE_X)); printf("SCALE_X %f\n",(float)SCALE_X); //原画像コピー grey_img1=cvCloneImage(scale_img); grey_img2=cvCloneImage(scale_img); //赤枠で囲む cvRectangle(scale_img,cvPoint(100,65),cvPoint(155,135),CV_RGB(255,0,0),LINE_THICKNESS,LINE_TYPE,SHIFT); cvRectangle(scale_img,cvPoint(185,70),cvPoint(240,135),CV_RGB(255,0,0),LINE_THICKNESS,LINE_TYPE,SHIFT);//左上、右下 //-----------------ROIの設定---------------------- CvRect rect1; rect1.x = 100; rect1.y = 65; rect1.width = 55; rect1.height = 70; cvSetImageROI(grey_img1,rect1); CvRect rect2; rect2.x = 185; rect2.y = 70; rect2.width = 55; rect2.height =65; cvSetImageROI(grey_img2,rect2);//左上、幅、高さ //---------------------------------------------------- //cvSaveImage("copy_img1.bmp",copy_img1); //入力画像表示 cvNamedWindow("img_window",CV_WINDOW_AUTOSIZE); cvShowImage("img_window",scale_img); //--------------------------グレースケールの場合---------------------------------------------------------------- //テンプレート・マッチングに用いる相関値データを格納する画像の領域確保 //グレー・スケール画像用に領域確保 //grey_img1=cvCreateImage(cvGetSize(copy_img1),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) //grey_img2=cvCreateImage(cvGetSize(copy_img2),IPL_DEPTH_8U,1); //1チャンネル8ビットのIplImage作成(元画像) dst1=cvCreateImage(cvSize(abs(grey_img1->width-grey_temp_up->width)+1,abs(grey_img1->height-grey_temp_up->height)+1),IPL_DEPTH_32F,1); //領域確保 dst2=cvCreateImage(cvSize(abs(grey_img2->width-grey_temp_side->width)+1,abs(grey_img2->height-grey_temp_side->height)+1),IPL_DEPTH_32F,1); //領域確保 //グレー・スケールに変換して格納 //cvCvtColor(copy_img1,grey_img1,CV_BGR2GRAY); //cvCvtColor(copy_img2,grey_img2,CV_BGR2GRAY); cvMatchTemplate(grey_img1,grey_temp_up,dst1,CV_TM_CCOEFF_NORMED); //テンプレートマッチング cvMatchTemplate(grey_img2,grey_temp_side,dst2,CV_TM_CCOEFF_NORMED); //テンプレートマッチング printf("dst1.x_%d\n",dst1->width); printf("dts1.y_%d\n",dst1->height); IplImage *dst3=cvCloneImage(dst1); IplImage *dst=cvCreateImage(cvSize((int)(dst3->width*SCALE_XX), (int)(dst3->height*SCALE_YY)), IPL_DEPTH_32F, 1); cvResize(dst3, dst, CV_INTER_LINEAR); cvNamedWindow("dst_window",CV_WINDOW_AUTOSIZE); cvShowImage("dst_window",dst); //------------------------------------------------------------------------------------------------------------- //-----------マッチング点を求める--------- cvMinMaxLoc(dst1,&min_inter1inkage,&max_inter1inkage,&min_point1,&max_point1,NULL); cvMinMaxLoc(dst2,&min_inter2inkage,&max_inter2inkage,&min_point2,&max_point2,NULL); printf("上 %f %f\n",(double)max_point1.x,(double)max_point1.y); printf("鏡 %f %f\n",(double)max_point2.x,(double)max_point2.y); //マッチング箇所を四角で描画 cvRectangle(scale_img,cvPoint(max_point1.x+rect1.x,max_point1.y+rect1.y),cvPoint(max_point1.x+rect1.x+temp_up->width,max_point1.y+rect1.y+temp_up->height),CV_RGB(255,0,0),3); cvRectangle(scale_img,cvPoint(max_point2.x+rect2.x,max_point2.y+rect2.y),cvPoint(max_point2.x+rect2.x+temp_side->width,max_point2.y+rect2.y+temp_side->height),CV_RGB(0,255,255),3); cvCircle(scale_img,cvPoint(max_point1.x+rect1.x,max_point1.y+rect1.y),10,CV_RGB(0,255,255),5,3,0); //画像を表示 cvNamedWindow("result",CV_WINDOW_AUTOSIZE); cvShowImage("result",scale_img); //類似度表示 printf("up_Detection %lf\n",max_inter1inkage); printf("side_Detection %lf\n",max_inter2inkage); //タイマー終了 int64 end = cv::getTickCount(); double elapsedMsec = ( end - start )*1000/cv::getTickFrequency(); //タイマー表示 std::cout << elapsedMsec <<"ms" <<std::endl; std::cout << std::endl; cvWaitKey(0); //メモリ解放 cvReleaseImage(&img); cvReleaseImage(&scale_img); cvReleaseImage(&copy_img1); cvReleaseImage(&copy_img2); cvReleaseImage(&grey_img1); cvReleaseImage(&grey_img2); cvReleaseImage(&dst1); cvReleaseImage(&dst2); cvDestroyWindow("result"); //メモリ解放 cvReleaseImage(&temp_up); cvReleaseImage(&temp_side); cvReleaseImage(&grey_temp_up); cvReleaseImage(&grey_temp_side); cvDestroyWindow("img_window"); return 0; }

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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