【问题标题】:Findcontours() run-time errorFindcontours() 运行时错误
【发布时间】:2017-05-09 10:43:55
【问题描述】:

我正在使用这样的功能;

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));

一些输入图像在函数返回时提示异常,它把我扔到“_Mybase::deallocate(_Ptr, _Count);” xmemory0 类中的代码块。我必须捕获这种错误并防止此过程意外暂停

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

我尝试了具有 30 种不同输入的代码块,但它在一些图像中给出了错误。在 findcontours 之后它抛出了一个异常中断并向我显示这条消息。

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

在那个时候,“矢量”类在我的 Visual Studio 中打开了这些行;

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

或以这些行开头的“xmemory”类;

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

【问题讨论】:

    标签: c++ opencv vector runtime-error


    【解决方案1】:

    您的方法找到的计数器数量似乎超过了 50000。 尽量不要使用幻数。这总是一个不好的做法。

    【讨论】:

    • 好吧,我尝试在没有 50000 的情况下初始化向量,但在那个时候,对于更多输入,我得到了同样的错误。无论如何我知道这不是有用的解决方案,但我必须彻底解决这个错误。
    • 尝试在没有 Point(0,0) 的情况下运行并尝试这个重载方法 void cv::findContours(InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset = Point())跨度>
    • 我可以毫无意义地尝试,但我需要层次结构。我已经知道这个方法选项,但它对我的情况没有用。但我将在没有 Point(0,0) 的情况下进行测试。
    • 我在带文字的黄色图片上运行你的代码,运行成功。
    • 3.2 尝试重新安装opencv(对于windows来说很简单,因为他们提供了安装程序)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-09
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2019-01-12
      • 1970-01-01
      • 2012-04-29
      • 2016-06-25
      相关资源
      最近更新 更多