• 締切済み

opencvの画像データを格納する構造体IplImageについて質問で

opencvの画像データを格納する構造体IplImageについて質問です。 今opencvを用いて画像処理をしていて、test1とtest2という画像データを宣言して test1からは横:縦が640:512の画像を読み込みます。 そして、IplImageの中のImageDataにアクセスし、test2のImageDataにtest1のImageDataを 各ピクセルに代入して、test2という画像データをウィンドウに表示させたいと思ってます。 私的にはtest1とtest2には同じ画像データが表示されると考えているのですが、実際に実行してみると 少し違う画像が表示され、次のようなエラーが表示されます。 「"0x7c951909"の命令が"0xfffffff8"のメモリを参照しました。メモリが"read"になることはできませんでした。」 実際にCの中では以下のようにプログラムを組んでいます。 for(i=0;i<test->height;i++){ for(j=0;j<test->widthStep;j++){ *(test2->imageData+test2->widthStep*i+j)=*(unsigned char *)(test->imageData+i*test->widthStep+j); } } 何が原因なのか教えていただけないでしょうか。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

だとすると、そのパラメータがtest1とあっているか確認してみてください。 見た目は8bit1チャンネルのグレースケールだけど、実際には8bit3チャンネルでR=B=Gになっているからグレースケールにみえる、ということもありますし

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

cvCreateImage でtest2の確保はできてますか? IplImage *test1 = cvLoadImage("foo.bmp",CV_LOAD_IMAGE_UNCHANGED); /* test1と同じサイズ、深さ、チャンネルでtest2を作成 */ CvSize sz ; sz.width=test1->width; sz.height=test1->height; IplImage *test2 = cvCreateImage( sz, test1->depth, test1->nChannels ) ; /* せっかくcvCopyがあるから使う */ cvCopy( test1,test2, NULL ) ;

kana_pre
質問者

補足

早速の回答ありがとうございます。 test2に関しては以下のように確保しています。 test2=cvCreateImage(cvSize(test1->width,test1->height),IPL_DEPTH_8U,1) 一応cloneも試してみます。

すると、全ての回答が全文表示されます。

関連するQ&A