我在运行以下代码时观察到异常(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中关闭这种异常而忘记它,但无论如何,我想了解这种奇怪行为的原因可能是什么是。有没有其他人经历过类似的事情?