2010-03-29 2 views
0

나는 얼마 전부터 Haar Cascaded 얼굴 인식을 직접 작성하고 OpenCV 2.0 구현을 시작했습니다. 저를 알리는 cvhaar.cpp:1518에 디버그 모드, 비주얼 스튜디오 나누기에서 실행 오른쪽 상자 밖으로cvHaarDetectObjects() : "스택에 'seq_thread'변수가 손상되었습니다."

, :

런타임 검사 실패 # 2 - 변수 seq_thread이 손상되었습니다 aound 스택.

OpenCV는 단순한 배열 범위를 벗어난 문제로 인해 나에게 이상한 것처럼 보입니다. 릴리스를 실행해도 아무런 문제없이 작동하지만 단순히 검사를 수행하지 않고 어레이가 경계를 초과하고 있다고 생각됩니다.

이 오류 메시지가 나타나는 이유는 무엇입니까? OpenCV의 버그입니까?

+0

귀하의 질문에 대한 답을 좀 더 명확히 말씀해 주시겠습니까? :-) –

+0

예, 죄송합니다. 리뷰를 할 때 전혀 문제가 없었습니다. 나는 또한 문제의 가능한 원인을 추가했다. –

+0

나는 VS2008에서 OpenCV를 디버깅하는 데별로 행운이 없었습니다. 나는 일반적으로 설치 패키지를 만들고 그런 식으로 내 응용 프로그램을 테스트하거나 적어도 .exe를 만들고 필요한 OpenCV .dll 파일이있는 폴더에 놓는 방법을 사용합니다. – ubiquibacon

답변

0

약간의 디버깅으로 범인이 밝혀졌습니다. 나는 그것을 "고쳤다". 그러나 이것 모두는 나에게 아직도 이상하게 보인다.

크기 CV_MAX_THREADS의 배열 cvhaar.cpp:868에 만들어집니다 : 라인이 진행 918에

CvSeq* seq_thread[CV_MAX_THREADS] = {0}; 

max_threads 지정하려면 다음 for 문을 사용하여 다양한 장소에서

max_threads = cvGetNumThreads(); 

, seq_thread이 반복된다 :

for(i = 0; i < max_threads; i++) { 
    CvSeq* s = seq_thread[i]; 
    // ... 
} 

그러나 cxmisc.h:108CV_MAX_THREADS 선언

#define CV_MAX_THREADS 1 

따라서, seq_thread의 선언 2 (I이 내 컴퓨터에 코어의 수를 반영 가정) 크기 1, 아직 cvGetNumThreads() 수익을 초과해서는 안됩니다.

if (max_threads > CV_MAX_THREADS) max_threads = CV_MAX_THREADS; 

이 메이크업 감각 중 하나를 수행합니다

나는 다음과 같은 간단한 작은 문을 추가하여 문제를 해결?

+0

덧붙여서이 문제는 OpenCV 2.1에서 해결 된 것 같습니다. –

관련 문제