news 2026/4/22 21:44:46

OpenCV联合C++/Qt 学习笔记(一)----Mat容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCV联合C++/Qt 学习笔记(一)----Mat容器

一、Mat类

1、什么是Mat类

Mat是 OpenCV 中用于表示和管理多维数组(尤其是图像数据)的核心数据结构。

2、Mat 的核心组成

3、Mat能存储的数据

  • cv::Mat_<_TP>
  • cv::Mat_<double>
  • cv::Mat_<float>
  • cv::Mat_<uchar>
  • cv::Mat_<unsigned char>

4、OpenCV中规定的数据类型

数据类型具体类型取值范围
CV_8U8位无符号整数0--255
CV_8S8位符号整数-128--127
CV_16U16位无符号整数0--65535
CV_16S16位符号整数-32768--32767
CV_32S32位符号整数-2147483648--2147483647
CV_32F32位浮点整数-FLT_MAX-FLT_MAX, INF, NAN
CV_64F64位浮点整数-DBL_MAX-DBL_MAX, INF, NAN

二、创建与赋值

1、三种常用创建方式

/*利用矩阵的宽、高、类型参数创建Mat类*/ Mat a(3,3,CV_8UC1); /*利用矩阵Size()结构和数据类型参数创建Mat类*/ Mat b(Size(3,3),CV_8UC1); /*利用已有Mat类创建新的Mat类*/ Mat c(b,Range(2,5),Range(2,5));/*范围从0开始,左闭右开,即Range(2,5)==>[2,5)*/

2、对Mat变量赋值

  • 创建时赋值
Mat c0(5, 5, CV_8UC1, Scalar(4, 5, 6)); Mat c1(5, 5, CV_8UC2, Scalar(4, 5, 6)); Mat c2(5, 5, CV_8UC3, Scalar(4, 5, 6));
  • 类方法赋值
/*eye:单位矩阵*/ Mat a = Mat::eye(3, 3, CV_32F); /*diag:对角矩阵*/ Mat b = (cv::Mat_<int>(1, 5) << 1, 2, 3, 4, 5); Mat c = Mat::diag(b); /*ones:元素全为1的矩阵*/ Mat d = Mat::ones(2, 3, CV_8U); /*zero:元素全为0的矩阵*/ Mat e = Mat::zeros(2, 3, CV_8U);
  • 枚举法赋值
Mat a = (cv::Mat_<int>(3,3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); Mat b = (cv::Mat_<double>(2,3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2);

三、Mat类数据的读取

1、Mat数据在内存中的存放形式

2、Mat类矩阵的常用属性

属性作用
cols矩阵的列数
rows矩阵的行数
step以字节为单位的矩阵的有效宽度
elemSize()每个元素的字节数
total()矩阵中元素的个数
channels()矩阵的通道数

3、Mat元素的读取

at方法读取Mat矩阵元素 at(int row, int col)

  • 单通道:
int value = (int)a.at<uchar>(0,0);
  • 多通道:
cv::Vec3b vc3 = b.at<cv::Vec3b>(0,0); int first = (int)vc3.val[0];

矩阵元素地址定位方式访问元素

/*单通道*/ (int)(*(b.data + b.step[0] * row + b.step[1] * col + channel)); /*比较直观*/ /*不用考虑数据类型*/

四、Mat支持的运算

1、四则运算

  • 符号运算(+、-、*、/)
  • 两个矩阵相乘
    • 1> 矩阵乘积----" * "
    • 2> 向量内积----" .dot "
    • 3> 对应位元素乘积----" .mul() "

2、提供的运算函数

函数名作用
absdiff()两个矩阵对应元素差的绝对值
add()两个矩阵求和
addWeighted()两个矩阵线性求和
divide()矩阵除法
invert()矩阵求逆
log()矩阵求对数
max()/min()两个矩阵计算最大值/最小值
Mat a = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); Mat b = (cv::Mat_<int>(3, 3) << 1, 2, 3, 7, 8, 9, 4, 5, 6); Mat c = (cv::Mat_<double>(3, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2, 7.0, 8.1, 9.2); Mat d = (cv::Mat_<double>(3, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2, 7.0, 8.1, 9.2); cout << "两个矩阵的和 = " << endl << a + b << endl; cout << "两个矩阵的差 = "<< endl << c - d << endl; cout << "矩阵数乘 = " << endl << a * 2 << endl; cout << "矩阵数除 = " << endl << d / 2.0 << endl; cout << "矩阵减数 = " << endl << a - 1 << endl; cout << "两矩阵相乘 = " << endl << c * d << endl; cout << "矩阵内积 = " << endl << a.dot(b) << endl; cout << "矩阵对应位相乘 = "<< endl << a.mul(b) << endl; cout << "两个矩阵最小值 = " << endl << min(a,b) << endl; /*************输出结果*************************************/ 两个矩阵的和 = [2, 4, 6; 11, 13, 15; 11, 13, 15] 两个矩阵的差 = [0, 0, 0; 0, 0, 0; 0, 0, 0] 矩阵数乘 = [2, 4, 6; 8, 10, 12; 14, 16, 18] 矩阵数除 = [0.5, 1.05, 1.6; 2, 2.55, 3.1; 3.5, 4.05, 4.6] 矩阵减数 = [0, 1, 2; 3, 4, 5; 6, 7, 8] 两矩阵相乘 = [31.8, 38.73, 45.66; 67.8, 84.63, 101.46; 103.8, 130.53, 157.26] 矩阵内积 = 258 矩阵对应位相乘 = [1, 4, 9; 28, 40, 54; 28, 40, 54] 两个矩阵最小值 = [1, 2, 3; 4, 5, 6; 4, 5, 6]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 21:41:25

深度解密:acbDecrypter如何破解游戏音频加密的三大核心技术

深度解密&#xff1a;acbDecrypter如何破解游戏音频加密的三大核心技术 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 在游戏开发与逆向工程领域&#xff0c;音频资源的提取与分析一直是技术难点。acbDecrypter作为一款专业…

作者头像 李华
网站建设 2026/4/22 21:38:18

Mask2Former训练显存爆了?试试这个采样技巧,轻松省下20G+显存

Mask2Former显存优化实战&#xff1a;随机点采样技巧解析与3090/4090适配指南 当你第一次在RTX 3090上运行Mask2Former训练脚本时&#xff0c;那个刺眼的"CUDA out of memory"错误提示是否让你瞬间血压升高&#xff1f;作为2022年CVPR最佳论文提名作品&#xff0c;这…

作者头像 李华
网站建设 2026/4/22 21:34:01

《QGIS快速入门与应用基础》294:双地图框布局(真彩色+假彩色对比)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…

作者头像 李华
网站建设 2026/4/22 21:23:28

Cavli C42GM多模LPWAN模块技术解析与应用实践

1. Cavli Wireless C42GM模块深度解析&#xff1a;一款重新定义LPWAN边界的多模物联网方案在LPWAN&#xff08;低功耗广域网&#xff09;领域&#xff0c;设备制造商常常面临一个经典困境&#xff1a;选择NB-IoT还是LTE-M&#xff1f;亦或是采用Sigfox这样的专有网络&#xff1…

作者头像 李华
网站建设 2026/4/22 21:22:28

CAN、RS485、RS422端接电阻实战:选值、布局与波形质量深度解析

1. 为什么端接电阻对工业通信如此重要&#xff1f; 第一次调试CAN总线时&#xff0c;我盯着示波器上扭曲的波形百思不得其解——明明按照参考设计做的电路&#xff0c;为什么信号质量这么差&#xff1f;直到老工程师递给我一个120Ω电阻&#xff1a;"把它并到总线上试试&q…

作者头像 李华