2.16. 在 V4L2 中定义色彩空间¶
在 V4L2 中,色彩空间由四个值定义。第一个是色彩空间标识符 (枚举 v4l2_colorspace
),它定义了色度、默认传递函数、默认 Y’CbCr 编码和默认量化方法。第二个是传递函数标识符 (枚举 v4l2_xfer_func
),用于指定非标准传递函数。第三个是 Y’CbCr 编码标识符 (枚举 v4l2_ycbcr_encoding
),用于指定非标准 Y’CbCr 编码,第四个是量化标识符 (枚举 v4l2_quantization
),用于指定非标准量化方法。大多数情况下,只需要填写 struct v4l2_pix_format
或 struct v4l2_pix_format_mplane
的色彩空间字段。
在 HSV 格式 中,“色调”被定义为圆柱形颜色表示中的角度。通常,这个角度以度为单位测量,即 0-360 度。当我们将这个角度值映射到 8 位时,有两种基本方法:将角度值除以 2 (0-179),或使用整个范围 0-255,将角度值除以 1.41。枚举 v4l2_hsv_encoding
指定使用哪种编码。
注意
所有色彩空间的默认 R’G’B’ 量化都是全范围。HSV 格式始终是全范围。
-
type v4l2_colorspace¶
标识符 |
详细信息 |
---|---|
|
默认色彩空间。应用程序可以使用此选项让驱动程序填写色彩空间。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
原始色彩空间。这用于原始图像捕获,其中图像经过最小处理,并使用设备的内部色彩空间。使用此“色彩空间”处理图像的软件必须了解捕获设备的内部结构。 |
-
type v4l2_xfer_func¶
标识符 |
详细信息 |
---|---|
|
使用色彩空间定义的默认传递函数。 |
|
使用 Rec. 709 传递函数。 |
|
使用 sRGB 传递函数。 |
|
使用 opRGB 传递函数。 |
|
使用 SMPTE 240M 传递函数。 |
|
不使用传递函数(即使用线性 RGB 值)。 |
|
使用 DCI-P3 传递函数。 |
|
使用 SMPTE 2084 传递函数。请参阅 传递函数 SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084)。 |
-
type v4l2_ycbcr_encoding¶
标识符 |
详细信息 |
---|---|
|
使用色彩空间定义的默认 Y’CbCr 编码。 |
|
使用 BT.601 Y’CbCr 编码。 |
|
使用 Rec. 709 Y’CbCr 编码。 |
|
使用扩展色域 xvYCC BT.601 编码。 |
|
使用扩展色域 xvYCC Rec. 709 编码。 |
|
使用默认的非恒定亮度 BT.2020 Y’CbCr 编码。 |
|
使用恒定亮度 BT.2020 Yc’CbcCrc 编码。 |
|
使用 SMPTE 240M Y’CbCr 编码。 |
-
type v4l2_hsv_encoding¶
标识符 |
详细信息 |
---|---|
|
对于色调,每个 LSB 是两度。 |
|
对于色调,360 度映射到 8 位,即每个 LSB 大约是 1.41 度。 |
-
type v4l2_quantization¶
标识符 |
详细信息 |
---|---|
|
使用色彩空间定义的默认量化编码。对于 R’G’B’ 和 HSV,这始终是全范围。对于 Y’CbCr,通常是有限范围。 |
|
使用全范围量化编码。即,范围 [0…1] 映射到 [0…255](可能会被裁剪到 [1…254] 以避免 0x00 和 0xff 值)。Cb 和 Cr 从 [-0.5…0.5] 映射到 [0…255](可能会被裁剪到 [1…254] 以避免 0x00 和 0xff 值)。 |
|
使用有限范围量化编码。即,范围 [0…1] 映射到 [16…235]。Cb 和 Cr 从 [-0.5…0.5] 映射到 [16…240]。有限范围不能与 HSV 一起使用。 |