0xC000001D:运行cvHaarDetectObjects opencv时出现非法指令

时间:2012-11-30 06:08:58

标签: opencv

我得到0xC000001D:运行cvHaarDetectObject时出现非法指令。以下是我的代码

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

谢谢和最诚挚的问候

1 个答案:

答案 0 :(得分: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()的每个变量进行类似的跟踪,以查看哪一个没有正确分配。