cv::Mat 取元素引起的报错

一、定义一个矩阵

方法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

相关推荐
qq_3349031513 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
阿贵---24 分钟前
C++代码规范化工具
开发语言·c++·算法
暮冬-  Gentle°32 分钟前
自定义内存检测工具
开发语言·c++·算法
梦醒过后说珍重42 分钟前
医学图像超分辨率:如何构建“教科书级”的模型评测与交互式可视化流水线?
opencv
2501_945424801 小时前
C++编译期矩阵运算
开发语言·c++·算法
2301_815482931 小时前
C++中的类型标签分发
开发语言·c++·算法
xushichao19891 小时前
代码生成优化技术
开发语言·c++·算法
leaves falling1 小时前
C++类和对象(1)
开发语言·c++
2401_873204651 小时前
模板编译期循环展开
开发语言·c++·算法
CoovallyAIHub1 小时前
2.5GB 塞进浏览器:Mistral 开源实时语音识别,延迟不到半秒
深度学习·算法·计算机视觉