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

C++ OpenCV mat.at gives access violation when using data

本文关键字:访问冲突 数据 mat at C++OpenCV      更新时间:2023-10-16

我正在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();