2012-11-30 1 views
3

0xC000001D가 표시됩니다. cvHaarDetectObject를 실행할 때 잘못된 명령이 표시됩니다. 아래 코드는0xC000001D : 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()가 필요합니까? 감사합니다. –

관련 문제