CV

像素数据类型参考

OpenCV 只接受一组固定的基元类型:数组元素必须是下表类型之一,或由相同类型元素组成的元组(多通道数组)。更复杂的元素类型无法构造或处理。本页对应官方 Introduction 中「Fixed Pixel Types」章节,含 5.0 新增类型。

深度类型一览

C++ 类型位宽范围典型用途
CV_8U0uint8_t / uchar8 位无符号0 ~ 255默认图像像素深度(灰度/彩色)
CV_8S1int8_t / schar8 位有符号-128 ~ 127部分掩码、标签图
CV_16U2uint16_t / ushort16 位无符号0 ~ 6553516 位图像、深度图
CV_16S3int16_t / short16 位有符号-32768 ~ 32767光流中间结果、梯度
CV_32S4int32_t / int32 位有符号±2.1×10⁹连通域标签、计数
CV_32F5float32 位浮点±3.4×10³⁸绝大多数算法默认浮点类型
CV_64F6double64 位浮点±1.7×10³⁰⁸标定、几何精确计算
CV_16F7hfloat (float16)16 位半精度IEEE 754 halfGPU/DNN 低精度推理
CV_16BF8bfloat16 位脑浮点bfloat16DNN 训练/推理量化5.0 新增
CV_Bool9bool布尔true / false布尔掩码、逻辑运算结果5.0 新增
CV_64U10uint64_t64 位无符号0 ~ 1.8×10¹⁹大范围计数/位集合5.0 新增
CV_64S11int64_t64 位有符号±9.2×10¹⁸大范围整数运算5.0 新增
CV_32U12uint32_t32 位无符号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 等基础算术全部类型
颜色空间转换 cvtColor8U / 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