2014-09-18 2 views
0

Я программирую фильтр DirectShow, который обнаруживает объекты с OpenCV HaarcascadeClassifier. Он отлично работает в режиме отладки, но не в режиме Release, и я не уверен, есть ли утечка памяти в функции OpenCV (двоичная версия VC 2010 из opencv_249 libs) или что-то не так с моим проектом (настройками).Ошибка отладки - DirectShow Filter, вызывающий функцию OpenCV - только режим освобождения

Я загружаю фильтр в GraphStudio, инструмент для создания DirectShow FilterGraph. Я не уверен, есть ли предположения о том, что 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 буфера.

Если я использую 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: 52 

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 

For information [...] 

с последующим

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? (если я запускаю «тот же» код/​​функциональность в режиме Release в автономном проекте, я не получаю Debug Assert Failed ошибок - хотя может быть непризнанное повреждение памяти?!?).

Надеюсь, у кого-то есть идея и thx заранее!

EDIT:

нормально ... Я связала против msvcrtd.lib ... удалили всю экспромты из моего проекта (кажется, я не сделал даже нужно) и «работает» теперь ... Eсть вопрос остался, есть ли какая-то утечка памяти. Или связывает ли это с единственной проблемой?

ответ

0

ok ... Я связался с msvcrtd.lib ...

удалил все экспромты из моего проекта (так по умолчанию ЛИЭС добавлены?!?) И «работает» теперь ...

Существует вопрос слева, есть ли какое-то утечка памяти. Или связывался с этим lib единственной проблемой?

глупый я ...