cv ::在调试配置中将两个cv :: Mat矩阵与opencv 3.0 / 3.1相乘时出现异常

时间:2016-09-30 23:50:07

标签: c++ visual-studio opencv

我在运行以下代码时观察到异常(Microsoft C ++异常:cv :: Exception at memory location 0x000000000028C510。)

cv::Mat a(5,60, CV_32FC1);
cv::Mat b(60,5, CV_32FC1);
cv::Mat c = a*b;

cv::Mat d(5, 60, CV_32FC1);
cv::Mat e(60,5, CV_32FC1);
cv::Mat f = d*e; 

执行第三行代码时抛出异常:

cv::Mat c = a*b;

之后不再发生(cv :: Mat f = d * e;不再抛出)。 Debuging将我引导到以下opencv函数:

inline
MatExpr::operator Mat() const
{
    Mat m;
    op->assign(*this, m);
    return m;   <- this is supposed to throw the exception
}

如果我写:

auto c = a*b;

而不是抛出异常,而是在最后一次调用时抛出:

cv::Mat f = d*e;

仅在调试模式下抛出异常,并且仅在使用 opencv 3.0 3.1 时抛出异常。 在发布模式或使用opencv 2.4时不会抛出任何异常。

我尝试使用visual studio 2013和2015.我使用prebuild opencv版本,可从官方opencv的网页下载。我检查了根据VS版本链接的正确opencv库。我只试过64位。我也尝试在其他计算机上使用Windows 7,但也有同样的行为。

在论坛上已经发布了一些类似标题的问题,但没有人解决这个具体问题。

最后,程序正在按预期工作,我知道我可以在VS中关闭这种异常而忘记它,但无论如何,我想了解这种奇怪行为的原因可能是什么是。有没有其他人经历过类似的事情?

0 个答案:

没有答案