
目录1. Mat 存储图像2. Mat 本质是什么3. 常见 Mat 类型4. Mat 访问像素5. Mat 的一个重要特点浅拷贝概念理解像素图片中的一个小点灰度像素一个数字 0~2550 黑色128 灰色255 白色彩色像素三个数字 B,G,R0最暗没有光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、R2.Mat本质是什么可以简单理解Mat | -- 图像尺寸 | -- 数据类型 | -- 内存地址 | -- 像素数据例如cv::Mat m(3, 3, CV_8UC1);创建一个3行 × 3列的单通道 8 位矩阵[0 0 0 0 0 0 0 0 0]其中CV_8U8位无符号整数C11个通道3. 常见 Mat 类型类型含义CV_8UC18位灰度图CV_8UC38位彩色图(BGR)CV_8UC4带透明通道图片CV_32FC1单通道浮点矩阵CV_64FC3三通道 double例如cv::Mat gray(480, 640, CV_8UC1);灰度图640 × 480每个像素0~2554. Mat 访问像素灰度图uchar value img.atuchar(100, 200);表示第100行第200列彩色图cv::Vec3b pixel img.atcv::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();