我在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设置或其他什么。
有人可以帮忙吗?
答案 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();