目录
1. Mat 存储图像
2. Mat 本质是什么?
3. 常见 Mat 类型
4. Mat 访问像素
5. Mat 的一个重要特点:浅拷贝
| 像素 | 图片中的一个小点 |
| 灰度像素 |
一个数字 0~255 0 = 黑色 128 = 灰色 255 = 白色 |
| 彩色像素 | 三个数字 B,G,R |
| 0 | 最暗,没有光 |
| 255 | 最亮 |
| Mat | 存放这些像素的矩阵 |
在 OpenCV 里,Mat 是 矩阵(Matrix) 的意思,是 OpenCV 中最核心的数据结构之一,用来存储图像、矩阵数据、像素数据等。
在 C++ OpenCV 中,它对应:
cv::Mat
例如:
#include <opencv2/opencv.hpp>
cv::Mat img;
这里的 img 就是一个 Mat 对象,可以表示一张图片。
1. Mat 存储图像
比如读取图片:
cv::Mat img = cv::imread("test.jpg");
此时:
- img.rows:图片高度(行数)
- img.cols:图片宽度(列数)
- img.channels():通道数
例如一张普通彩色图片:
1920 × 1080 × 3
表示:
- 1080 行
- 1920 列
- 3 个颜色通道(B、G、R)
2. Mat 本质是什么?
可以简单理解:
Mat
|
+– 图像尺寸
|
+– 数据类型
|
+– 内存地址
|
+– 像素数据
例如:
cv::Mat m(3, 3, CV_8UC1);
创建一个:3行 × 3列的单通道 8 位矩阵:
[0 0 0
0 0 0
0 0 0]
其中:
- CV_8U:8位无符号整数
- C1:1个通道
3. 常见 Mat 类型
| CV_8UC1 | 8位灰度图 |
| CV_8UC3 | 8位彩色图(BGR) |
| CV_8UC4 | 带透明通道图片 |
| CV_32FC1 | 单通道浮点矩阵 |
| CV_64FC3 | 三通道 double |
例如:
cv::Mat gray(480, 640, CV_8UC1);
灰度图:
640 × 480
每个像素:
0~255
4. Mat 访问像素
灰度图:
uchar value = img.at<uchar>(100, 200);
表示:
第100行,第200列
彩色图:
cv::Vec3b pixel = img.at<cv::Vec3b>(100,200);
得到:
[B, G, R]
5. Mat 的一个重要特点:浅拷贝
OpenCV 的 Mat 默认使用引用计数,复制不会立即复制数据:
cv::Mat a = cv::imread("test.jpg");
cv::Mat b = a;
此时:
a —-\\
—> 同一块图像数据
b —-/
如果想真正复制:
cv::Mat c = a.clone();
网硕互联帮助中心





评论前必须登录!
注册