我在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安装程序中。有人可以帮忙吗? 最佳答案
问题是您创建了一个float(32FC1)矩阵,并且您尝试使用double对其进行访问,这会导致访问权限超出范围。
您可以在任何地方使用float:
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();