2014-09-18 4 views
0

OpenCV HaarcascadeClassifier을 사용하여 개체를 검색하는 DirectShow 필터를 프로그래밍하고 있습니다. 디버그 모드에서는 잘 작동하지만 릴리즈 모드에서는 작동하지 않으며 OpenCV 함수 (opencv_249 라이브러리의 VC 2010 바이너리)에 메모리 누수가 있는지 또는 프로젝트 (설정)에 문제가 있는지 여부가 확실하지 않습니다.디버그 어설 션 실패 - OpenCV 함수를 호출하는 DirectShow 필터 - 릴리스 모드 만

DirectShow FilterGraph를 쉽게 구축 할 수있는 도구 인 GraphStudio에 필터를로드하고 있습니다. 디버그 모드에서 컴파일 될 필터 DLL에 대한 가정 여부가 확실하지 않습니다.

나는 기본적으로 몇 가지 전처리 한 후, 다음과 같은 일을 해요 :

std::vector<cv::Rect> objects; 
mClassifier.detectMultiScale(inputGray,objects, 1.3); 

for(unsigned int i=0; i<objects.size(); ++i) 
{ 
    cv::rectangle(outputImage, objects[i], cv::Scalar(255,255,255)); 
} 

그래서 전처리하고있는 기능 블록, 코드의 표시 부분을 다음과 DirectShow의 버퍼에 데이터를 작성하여 다음 내.

Debug Assertion Failed! 

Program: C:\Program Files (x86)\Graphstudio\graphstudio.exe 
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp 
Line: 52 

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 

For information [...] 

다음 : 내가 릴리스 모드에서 DLL을 사용하는 경우

, 나는 전체 기능 (그래서 아마 다른 곳 DirectShow를 Filtergraph 내부) 종료 후에 다음과 같은 오류 메시지가

Debug Assertion Failed! 

Program: C:\Program Files (x86)\Graphstudio\graphstudio.exe 
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp 
Line: 1322 

Expression: _CrtlsValidHeapPointer(pUserData) 

내가 mClassifier.detectMultiScale(inputGray,objects, 1.3);이라고 말하면 필터가 작동하지 않습니다. 어떤 것들은 최적화되어 있지만, detectMultiScale 콜을 무작위로 (이전에 시간 (NULL)을 사용하여 시드 한) 루프로 대체하여 cv::Rect 오브젝트를 벡터에 삽입합니다. 필터는 충돌하지 않고 내가 추측 할 수있는 방식으로 임의의 직사각형을 표시합니다.

저는 다른 사람들이 (valgrind) cv::CascadeClassifiert::detectMultiScale을 관찰하여 메모리 누수가 있음을 읽었습니다. 그리고 누군가가 detectSingleScale에 문제가있는 링크를 발견했으며 일부 OpenCV 커미터가 그것을 고정으로 표시했습니다 (http://code.opencv.org/issues/2628).

질문 :

detectMultiScale 내에서이 정확한 문제는 (이전 링크를 참조)하는 기회가 (여전히)는이 있습니까?

문제가 내 프로젝트가 아니라 OpenCV 라이브러리에있을 가능성이 있습니까?

왜이 문제는 릴리스 모드에서만 발생합니까?

왜이 문제는 DirectShow 필터에서만 발생합니까? (독립 실행 형 프로젝트에서 "동일한"코드/기능을 릴리스 모드로 실행하는 경우 Debug Assert Failed 오류가 발생하지 않지만 인식 할 수없는 메모리 손상이있을 수 있습니다.?).

전 누군가가 아이디어를 가지고 있고 사전에 희망을 갖고 있기를 바랍니다.

편집 :

확인 ... 나는 내 프로젝트에서 전체 LIB를 제거 ... msvcrtd.lib에 링크했다 (심지어 일부러 그것을 필요로 보인다)와 지금은 ...있다 "작동" 문제는 메모리 누출이 있는지 여부입니다. 아니면 그 lib에 유일한 전체 문제를 연결했다?

답변

0

확인 ... msvcrtd.lib와 연결되었습니다 ...

내 프로젝트에서 전체 LIB를 제거 (그래서 기본 libs와?!? 추가)하고 지금은 ...

남은 문제는 메모리 누수의 어떤 종류가 있는지,있다 "작동". 아니면 lib에 대해서만 전체적인 문제를 연결하고 있었습니까?

어리석은 me ...