C ++ OpenCV mat.at在使用数据时提供访问冲突

时间:2011-06-10 00:11:56

标签: c++ dll opencv access-violation

我在visual studio 2010 C ++ dll中使用openCV 2.1进行矩阵运算。该DLL从VB.NET程序接收数组并将它们加载到矩阵中以进行某些操作。但是,我不能在任何cv :: mat对象上使用.at成员而不会抛出访问冲突异常。我以为是因为我正在传递数组,但我甚至无法运行它:

Mat Rhat(2,1,CV_32FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();

如果我删除.at行,那么它运行正常。我使用CvMat类型完成了C的全部工作,但它不喜欢cvCreateMat并开始使用cv命名空间。我在dll中的所有非opencv函数都运行正常,所以问题出在我的cv设置或其他什么。
有人可以帮忙吗?

1 个答案:

答案 0 :(得分:7)

问题是您创建了一个float(32FC1)矩阵,并且您尝试使用double访问它,这会导致超出访问范围。

你可以在任何地方使用浮动:

Mat Rhat(2,1,CV_32FC1);
Rhat.at<float>(0,0) = 10;
Rhat.release();

或双倍:

Mat Rhat(2,1,CV_64FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();