Opencv: cv::Mat支持的类型汇总
OpenCV 里 cv::Mat
的类型 是由两个维度组合起来的:
数据深度(Depth) → 决定每个元素的存储格式(位数、是否浮点)
通道数(Channels) → 决定每个像素包含多少个值(如灰度图是 1,RGB 是 3,RGBA 是 4)
1️⃣ 数据深度(Depth)
OpenCV 常用的深度常量:
常量 | 每通道位数 | C++ 类型 | 范围(无符号/有符号) |
---|---|---|---|
CV_8U | 8-bit | unsigned char | 0 ~ 255 |
CV_8S | 8-bit | signed char | -128 ~ 127 |
CV_16U | 16-bit | unsigned short | 0 ~ 65535 |
CV_16S | 16-bit | short | -32768 ~ 32767 |
CV_32S | 32-bit | int | -2,147,483,648 ~ 2,147,483,647 |
CV_32F | 32-bit | float | 约 ±3.4e38(7 位有效数字) |
CV_64F | 64-bit | double | 约 ±1.8e308(15 位有效数字) |
2️⃣ 通道数(Channels)
通道数是 1~512 的整数(常见 1、2、3、4)
灰度图 → 1 通道
RGB → 3 通道
RGBA → 4 通道
3️⃣ 组合成完整类型
OpenCV 用宏 CV_<位深度><S/U/F><通道数>
表示类型,例如:
常量 | 解释 |
---|---|
CV_8UC1 | 8 位无符号,1 通道(灰度图) |
CV_8UC3 | 8 位无符号,3 通道(RGB) |
CV_8UC4 | 8 位无符号,4 通道(RGBA) |
CV_16SC1 | 16 位有符号,1 通道 |
CV_16UC3 | 16 位无符号,3 通道 |
CV_32FC1 | 32 位浮点,1 通道 |
CV_32FC3 | 32 位浮点,3 通道 |
CV_64FC1 | 64 位浮点,1 通道 |
CV_64FC4 | 64 位浮点,4 通道 |
4️⃣ 查看 Mat 的类型
cv::Mat img = cv::imread("test.png");
std::cout << img.type() << std::endl; // 输出类型编号