3

cvHaarDetectObject を実行すると、0xC000001D: Illegal Instruction が表示されます。以下は私のコードです

int main() {

IplImage* img;
img = cvLoadImage( "lena.jpg",1);

CvMemStorage* storage = cvCreateMemStorage(0);
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_alt2.xml" );


static CvScalar colors[] = { {{0,0,255}}, {{0,128,255}}, {{0,255,255}}, 
{{0,255,0}}, {{255,128,0}}, {{255,255,0}}, {{255,0,0}}, {{255,0,255}} };

// Detect objects
cvClearMemStorage( storage );
CvSeq* objects = cvHaarDetectObjects( img, cascade, storage, 1.1, 2, 0, cvSize(40, 40) );

CvRect* r;
// Loop through objects and draw boxes
for( int i = 0; i < (objects ? objects->total : 0 ); i++ ){
    r = ( CvRect* )cvGetSeqElem( objects, i );
    cvRectangle( img, cvPoint( r->x, r->y ), cvPoint( r->x + r->width, r->y + r->height ),
        colors[i%8]);
}

cvNamedWindow( "Output" );
cvShowImage( "Output", img );
cvWaitKey();


cvReleaseImage( &img );

return 0;
}

設定がおかしいのでしょうか?コードをコンパイルできますが、実行すると、cvHaarDetectObjects までプログラムを実行すると、不正な命令エラーが発生します。

すべての lib ファイルを含め、プロジェクトの同じディレクトリ内にイメージを配置しました。

私はVS2010、Opencv2.4.3を使用しています

よろしくお願いします

4

1 に答える 1

2

私は今朝この正確な例を扱っていて、このエラーを修正しました。

まず、ストレージにエラーが発生していたので、ストレージを大きくしました (デフォルトでは 64MB でした。調べたところ 64KB だったと思います)。これで最初の割り当てエラーは修正されましたが、cvHaarDetectObjects() エラーはまだ発生していました。おそらく/おそらくこれを行う必要がないことに注意してください。

次に、cvHaarDetectObjects() 呼び出しの上に画像を表示する部分をコピーして貼り付けました。

cvNamedWindow( "Output" );
cvShowImage( "Output", img );
cvWaitKey();

// Detect objects
cvClearMemStorage( storage );
CvSeq* objects = cvHaarDetectObjects( img, cascade, storage, 1.1, 2, 0, cvSize(40, 40) );

画像が読み込まれていないことがわかりました! 表示された画像がそこにあることを確認したら、それを元に戻し、コード全体を実行しました-それは魔法のように機能しました.

それでも問題が解決しない場合は、 cvHaarDetectObjects() に入るすべての変数について同様のトレースを実行して、どの変数が正しく割り当てられていないかを確認することをお勧めします。

于 2012-11-30T19:54:55.020 に答える