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