Findcontours()运行时错误

时间:2017-05-09 10:43:56

标签: c++ opencv vector runtime-error

我正在使用这样的功能;

Mat large = imread(path+name);
Mat rgb;
if (large.rows > 2500 || large.cols > 1250)
{
    pyrDown(large, rgb);
}
else
{
    rgb = large.clone();
}
cv::Mat smallx;
cvtColor(rgb, smallx, CV_BGR2GRAY);
Mat grad,connected,bw;

Mat morphKernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
cv::morphologyEx(smallx, grad, MORPH_GRADIENT, morphKernel);
cv::threshold(grad, bw, 100, 255, THRESH_BINARY + THRESH_OTSU);
morphKernel = getStructuringElement(MORPH_RECT, Size(9, 1));
cv::morphologyEx(bw, connected, MORPH_CLOSE, morphKernel);

Mat mask = Mat::zeros(bw.size(), CV_8UC1);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;

cv::findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

当函数返回时,某些输入图像会提示异常,它会将我抛给&#34; _Mybase :: deallocate(_Ptr,_Count);&#34; xmemory0类中的代码块。我必须抓住这种错误并防止此过程出现意外暂停

--------------错误详情--------------

我尝试了30个不同输入的代码块但是在一些图像中出错了。在findcontours之后,它会抛出异常中断并向我显示此消息。

  

0x74477fb2(ucrtbase.dll)中的未处理异常   ImageRecognizer.exe:0xC0000409:0xc0000409。

在那个时候,&#34; vector&#34;使用这些行在我的Visual Studio中打开类;

~vector() _NOEXCEPT
    {   // destroy the object
    _Tidy();
    }

或&#34; xmemory&#34;用这些线打开课程;

void deallocate(pointer _Ptr, size_type _Count)
    {   // deallocate object at _Ptr, ignore size
    _Mybase::deallocate(_Ptr, _Count);
    }

2 个答案:

答案 0 :(得分:1)

您的方法发现的计数器数量似乎超过50000。 尽量不要使用魔术数字。这总是一种不好的做法。

答案 1 :(得分:0)

我尝试使用OpenCV 2.4.13而不是OpenCV 2.4.12,问题本身就解决了。它不是算法或逻辑错误。这是一个库错误。