像素数据类型参考
OpenCV 只接受一组固定的基元类型:数组元素必须是下表类型之一,或由相同类型元素组成的元组(多通道数组)。更复杂的元素类型无法构造或处理。本页对应官方 Introduction 中「Fixed Pixel Types」章节,含 5.0 新增类型。
深度类型一览
| 宏 | 值 | C++ 类型 | 位宽 | 范围 | 典型用途 |
|---|---|---|---|---|---|
CV_8U | 0 | uint8_t / uchar | 8 位无符号 | 0 ~ 255 | 默认图像像素深度(灰度/彩色) |
CV_8S | 1 | int8_t / schar | 8 位有符号 | -128 ~ 127 | 部分掩码、标签图 |
CV_16U | 2 | uint16_t / ushort | 16 位无符号 | 0 ~ 65535 | 16 位图像、深度图 |
CV_16S | 3 | int16_t / short | 16 位有符号 | -32768 ~ 32767 | 光流中间结果、梯度 |
CV_32S | 4 | int32_t / int | 32 位有符号 | ±2.1×10⁹ | 连通域标签、计数 |
CV_32F | 5 | float | 32 位浮点 | ±3.4×10³⁸ | 绝大多数算法默认浮点类型 |
CV_64F | 6 | double | 64 位浮点 | ±1.7×10³⁰⁸ | 标定、几何精确计算 |
CV_16F | 7 | hfloat (float16) | 16 位半精度 | IEEE 754 half | GPU/DNN 低精度推理 |
CV_16BF | 8 | bfloat | 16 位脑浮点 | bfloat16 | DNN 训练/推理量化5.0 新增 |
CV_Bool | 9 | bool | 布尔 | true / false | 布尔掩码、逻辑运算结果5.0 新增 |
CV_64U | 10 | uint64_t | 64 位无符号 | 0 ~ 1.8×10¹⁹ | 大范围计数/位集合5.0 新增 |
CV_64S | 11 | int64_t | 64 位有符号 | ±9.2×10¹⁸ | 大范围整数运算5.0 新增 |
CV_32U | 12 | uint32_t | 32 位无符号 | 0 ~ 4.3×10⁹ | 无符号计数、位图5.0 新增 |
多通道(n 通道)类型
- 常量形式(1~4 通道)
CV_8UC1 CV_8UC3 CV_16UC1 CV_32FC2 CV_64FC4 … - 宏形式(任意通道数)
CV_8UC(n) CV_32FC(n) - 运行时构造
CV_MAKETYPE(CV_8U, n) // depth + ((n-1) << CV_CN_SHIFT) - 通道数上限
CV_CN_MAX = 128
构造示例
// 3×3 单通道浮点矩阵
cv::Mat mtx(3, 3, CV_32F);
// 10×1 双通道(复数向量)
cv::Mat cmtx(10, 1, CV_64FC2);
// 1920×1080 彩色图像
cv::Mat img(cv::Size(1920, 1080), CV_8UC3);
// 同尺寸单通道灰度图
cv::Mat gray(img.size(), CV_MAKETYPE(img.depth(), 1));
// Python / NumPy 等价
np.zeros((1080, 1920, 3), dtype=np.uint8) # CV_8UC3相关概念
饱和运算(Saturation)
写入 8/16 位图像时,将结果裁剪到合法范围:I = min(max(round(r), 0), 255)。C++ 中用 saturate_cast<uchar>(r);SIMD 指令(paddusb、packuswb)保证一致行为。32 位整数结果不饱和。
深度 × 通道 = 类型
Mat.type() 由深度(低 3~5 位)与通道数共同决定。#CV_32FC2 == CV_MAKETYPE(CV_32F, 2);CV_MAT_DEPTH(depth) 取最低 CV_CN_SHIFT(当前为 5)位。
运行时分发而非模板
为控制编译时间并便于 Python/Java 绑定,OpenCV 主体使用多态与运行时分发;仅在像素访问、saturate_cast、Ptr 等处使用轻量模板。
函数支持的类型子集
算法越复杂,通常支持的类型子集越小(由实际需求决定,未来可扩展)。
| 功能 | 支持类型 |
|---|---|
| cv::add 等基础算术 | 全部类型 |
| 颜色空间转换 cvtColor | 8U / 16U / 32F |
| 线性代数与多数 ML 算法 | 仅浮点 |
| 人脸检测(Haar/DNN) | 8 位灰度或彩色 |
| 滤波、形态学 | 8U / 16U / 32F 常见 |
速查:常用 API
Mat::type()返回完整类型(深度 + 通道)Mat::depth()返回深度宏(CV_8U 等)Mat::channels()返回通道数CV_MAT_DEPTH(type)从类型中提取深度CV_CN_MAX最大通道数(128)saturate_cast<T>(v)带饱和的类型转换来源:docs.opencv.org/5.0 Introduction,Fixed Pixel Types / Saturation Arithmetics