プロが教える店舗&オフィスのセキュリティ対策術

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);

}
}

何が原因なのか教えていただけないでしょうか。

A 回答 (2件)

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 ) ;

この回答への補足

早速の回答ありがとうございます。

test2に関しては以下のように確保しています。
test2=cvCreateImage(cvSize(test1->width,test1->height),IPL_DEPTH_8U,1)

一応cloneも試してみます。

補足日時:2010/05/20 07:02
    • good
    • 0

だとすると、そのパラメータがtest1とあっているか確認してみてください。



見た目は8bit1チャンネルのグレースケールだけど、実際には8bit3チャンネルでR=B=Gになっているからグレースケールにみえる、ということもありますし
    • good
    • 0

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