【发布时间】: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