2012-11-30 59 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()嗎? 感謝和最好的關注 –