一、定义一个矩阵
方法1:定义的时候,矩阵元素无初始值,需要赋值
cv::Mat intrinsic(3, 3, CV_64F );
cv::Mat distortion(1, 5, CV_64F);
1.矩阵赋值
intrinsic.at<double>(0, 0) = 2400;
intrinsic.at<double>(0, 1) = 0;
intrinsic.at<double>(0, 2) = 960;
intrinsic.at<double>(1, 0) = 0;
intrinsic.at<double>(1, 1) = 2400;
intrinsic.at<double>(1, 2) = 540;
intrinsic.at<double>(2, 0) = 0;
intrinsic.at<double>(2, 1) = 0;
intrinsic.at<double>(2, 2) = 1;
distortion.at<double>(0, 0) = 0 ;
distortion.at<double>(0, 1) = 0;
distortion.at<double>(0, 2) = 0;
distortion.at<double>(0, 3) = 0;
distortion.at<double>(0, 4) = 0;
方法2:定义的时候,矩阵元素初始为0
cv::Mat intrinsic = cv::Mat::zeros(3, 3, CV_64FC1);
cv::Mat distortion = cv::Mat::zeros(1, 5, CV_64FC1);
intrinsic.at<double>(0, 0) = 2400;
intrinsic.at<double>(0, 2) = 960;
intrinsic.at<double>(1, 1) = 2400;
intrinsic.at<double>(1, 2) = 540;
intrinsic.at<double>(2, 2) = 1;
方法3:cv::Mat_ 定义矩阵,直接初始化
cv::Mat distortion = (cv::Mat_<double>(1, 5) << 0, 0, 0, 0, 0);
二、定义的Mat类型,与使用时的类型不一致
使用Mat .at时数据类型的选择错误:如double类型的数据,你写成了float就会报错。
intrinsic.at<float>(0, 0) = 2000;
报错1:OpenCV(4.4.0) Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file D:\Projects\C++\opencv_test\opencv_test\opencv_test\include\opencv2\core\mat.inl.hpp, line 1157
三、Mat.at 取值越界
intrinsic.at<double>(3, 0) = 2000;
报错2:OpenCV(4.4.0) Error: Assertion failed (data) in cv::Mat::at, file D:\Projects\C++\opencv_test\opencv_test\opencv_test\include\opencv2\core\mat.inl.hpp, line 1154