Ошибка в использовании функции finContours и загрузке файлов ntdll

Я новичок в использовании VS2012 & openCV для завершения моего FYP, где я должен обнаруживать человеческие тела (Обнаружение объектов), используя Contours. Я успешно установил оба (VS2012 & OpenCV) & выполнял некоторую базовую обработку изображений без каких-либо неизвестных проблем, кроме логической или синтаксической, пока я не наткнулся на функцию findContours, где я сейчас нахожусь под стражей. Моя проблема:

Когда я не использую вещи, связанные с Contour, то есть findContours, drawContours, комментируя, все в порядке, и я могу использовать трекбар для расширения / размытия изображения, но как только я использую вещи, связанные с Contour, и нажимаю ‘F5’, изображение Отображение контуров вокруг обнаруженных объектов показывается вместе с точкой останова, говоря, что Program.exe вызвал точку останова, и, следовательно, я не могу использовать ее дальше.

Для вашего удобства ниже приведены листинги в стеке трассировки:

Примечание 1:
Я следовал инструкциям, данным , но после загрузки невыделенного «ntdll.dll» & msvcr »через серверы символов Microsoft выделяется & при перезапуске (Cntrl + Shift + F5) или отладке (F5) он снова становится невыделенным, что указывает на его отсутствие.

Примечание 2: я составил список для удобства.

ntdll.dll!77ca5204()    Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77c6fbae()    Unknown
ntdll.dll!77c02b04()    Unknown
KernelBase.dll!75ff7e27()   Unknown
>   msvcr110d.dll!_CrtIsValidHeapPointer(const void * pUserData) Line 2036  C++
msvcr110d.dll!_free_dbg_nolock(void * pUserData, int nBlockUse) Line 1322   C++
msvcr110d.dll!_free_dbg(void * pUserData, int nBlockUse) Line 1265  C++
msvcr110d.dll!operator delete(void * pUserData) Line 54 C++
binaryFrame.exe!std::allocator<cv::Point_<int> >::deallocate(cv::Point_<int> * _Ptr,
unsigned int __formal) Line 586 C++
binaryFrame.exe!std::_Wrap_alloc<std::allocator<cv::Point_<int> >
>::deallocate(cv::Point_<int> * _Ptr, unsigned int _Count) Line 888 C++
binaryFrame.exe!std::vector<cv::Point_<int>,std::allocator<cv::Point_<int> > >::_Tidy()
binaryFrame.exe!showBinImage() Line 66  C++
binaryFrame.exe!main(int __formal, char * * argv) Line 21   C++
binaryFrame.exe!__tmainCRTStartup() Line 536    C
binaryFrame.exe!mainCRTStartup() Line 377   C
kernel32.dll!763e1154() Unknown
ntdll.dll!77c3b299()    Unknown
ntdll.dll!77c3b26c()    Unknown

Ниже приведен код, который я использую для обнаружения контура в изображении:

#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <iostream>

using namespace cv;
using namespace std;

void showBinImage();

int val=2;int main( int, char** argv )
{
showBinImage();
return 0;
}void showBinImage(){
Mat bin;
Mat im_gray;Mat im_rgb  = imread("nk5.jpg");

//  Trackbar

namedWindow("ErodedImage",1);
createTrackbar("Erode", "ErodedImage", &val, 50);

cvtColor(im_rgb, im_gray,CV_RGB2GRAY);
threshold(im_gray, bin, 128.0, 255.0, THRESH_BINARY_INV);
//imwrite("bnasir.jpg", img_bw);
namedWindow("Binary",1);
imshow("Binary", bin);

while (true)
{

Mat erodeElement = getStructuringElement( MORPH_CROSS,Size(val*3,val*3));
Mat dilateElement = getStructuringElement( MORPH_RECT,Size(val*8,val*8));
Mat eroded; // the destination image
erode(bin,eroded,erodeElement+50);
dilate(eroded,eroded,dilateElement);
std::vector<std::vector<cv::Point>> contours;
findContours(eroded, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
// Draw black contours on a white image
Mat result(eroded.size(),CV_8U,cv::Scalar(255));
drawContours(result,contours,-1, cv::Scalar(0), 2); // with a thickness of 2
imshow("ErodedImage",(eroded));
waitKey(10);

}

}

0

Решение

Я перешел с VS2012 на VS2010, и теперь все работает отлично! Я не знаю, в чем проблема с VS2012, потому что VS2013 также дает результаты как VS2010, но для использования VS2013 вам нужна ОС Windows 8. Поэтому я вернулся к более старой версии, так как я использую ОС Windows 7!

0

Другие решения


По вопросам рекламы [email protected]