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

问题描述

| 我正在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,CV_64FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();