2011-09-29 5 views
6

Visual Studio 2010의 OpenCV \ Samples \ C 폴더에 facedetect.cpp을 컴파일하려고합니다. 프로젝트가 컴파일되고 시작되어 카메라의 미리보기가 표시됩니다. , 얼굴을 감지하자마자 cascade.detectMultiScale()에서 충돌하는 것처럼 보입니다. 나는 OpenCV가 내가 너무 추악하다고 생각한다고 결론을 내렸다.OpenCV 2.1 : 못생긴 얼굴을 발견하면 facedetect.cpp가 충돌합니다.

Unhandled exception at 0x100342bf in HeadTrackerExample.exe: 0xC0000005: Access violation writing location 0x00000000.

불행하게도 디버그 정보는 나에게 깊은 조사하지 않습니다. 나는 cv210.lib; cxcore210.lib; highgui210.lib와 연결하고있다.

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002

내가 앤 해서웨이의 인쇄물로 분류 트릭을 시도거야하지만 난 다른 제안에 열려입니다 : 디버그 버전이 작동하지 않습니다.

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/facedetect.cpp

+2

단서가 없지만 유머 감각을 가지고 +1했습니다. –

+0

'cascade.detectMultiScale()'에 대한 호출을 볼 수 있도록 코드를 보여줄 수 있습니까? 아니면 코드가 너무 못생긴가? :-) – SSteve

+0

코드가 이제 질문에 링크되었습니다! 보시다시피, 포함 된 샘플 코드 일 뿐이므로 시스템 또는 프로젝트 구성에 문제가있을 수 있습니다. –

답변

0

나는 이것을 고치려고 하루를 보냈다. 왜 그것이 부서지는 지 누가 압니까? 디버그 DLL에 연결할 수 없어 결코 알 수 없습니다. OpenCV-2.1.0-win32-vs2008.exe 배포판을 다운로드했습니다. 그리고 따라서 Visual Studio 2010에서 Visual Studio 2010를 사용하고, exe 인이는 "0xc0150002 오류"입니다

LDR: LdrpWalkImportDescriptor() failed to probe D:\OpenCV2.1\bin\cv210d.dll for its manifest, ntstatus 0xc0150002 Debugger:: An unhandled non-continuable exception was thrown during process load The program '[5172] HeadTrackerExample.exe: Native' has exited with code -1072365566 (0xc0150002).

와 충돌했다. Dependency Walker에 따르면 OpenCV 디버그 DLL은 Visual Studio 2008 디버그 런타임 DLL 인 msvcr90d.dll 및 msvct90d.dll을 찾으려고합니다. 글쎄, 나는 이것들을 얻었지만 여전히 작동하지 않았다. 그래서 이것은 밀교적인 윈도우 사이드 사이드에 들어가서 물건을 드러낸다.

OpenCV-2.3.1-win-superpack.exe 배포본으로 전환 했으므로 이제 작동 중입니다.

1

나는 (OS X에서) 여기에서 일하고 있기 때문에 내가 더 잘 당신보다 더 찾고 있어요 같아요. xml 파일을 성공적으로로드하고 있습니까? 기본 xml 파일 (haarcascade_frontalface_alt.xml 및 haarcascade_eye_tree_eyeglasses.xml)을 사용하고 있습니까?

null 포인터가있는 것 같습니다. cascade.detectMultiScale() 호출에서 중단 점을 설정하고 cascade, smallImg, smallImg.datafaces의 값을 확인하십시오.

편집 : 모든 탐지가 이루어집니다

void HaarClassifierCascade::detectMultiScale(const Mat& image, 
         Vector<Rect>& objects, double scaleFactor, 
         int minNeighbors, int flags, 
         Size minSize) 
{ 
    MemStorage storage(cvCreateMemStorage(0)); 
    CvMat _image = image; 
    CvSeq* _objects = cvHaarDetectObjects(&_image, cascade, storage, scaleFactor, 
              minNeighbors, flags, minSize); 
    Seq<Rect>(_objects).copyTo(objects); 
} 

그것은 faces 벡터 접촉 아니에요 마지막 줄까지 후 : 여기에 faces 벡터

을 채우기는 detectMultiScale 코드입니다. 만약 당신이 모험이라면 이 완료되고 있는지 그리고 null 포인터를 반환하는지 확인하기 위해 여기에 printf 문을 던질 수 있습니다.

+0

예, xml이 잘로드됩니다. 좋은 디버그 팁, 내가 시도해 볼게. 그러나 detectMultiScale 호출은 * faces *가 얼굴을 찾을 때까지 성공적으로 완료됩니다. 이는'faces' 벡터 (참조로 액세스 됨)를 채울 때 문제가 있다고 생각하게 만듭니다. –