2012-11-30 30 views
3

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

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

感谢和问候

回答

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每个变量的类似的痕迹。

+0

感谢您的答复.. 如何让我使用Visual Studio 2010我的存储更大? 我将图像加载到cvHaarDetectObjects上,我发现图像无法显示,如果我删除cvWaitKey(),这是问题吗?我需要cvWaitKey()吗? 感谢和最好的关注 –