我从 ov7670 相机对 YCbCr 中的图像进行采样,并使用 jpegant 库对 jpeg 文件进行编码。每当我直接使用相机中的 Y、Cb、Cr 值进行此操作时,我都会得到一个粉紫色版本的图像。据我在维基百科上了解,有不同的 YCbCr 标准,所以我猜我的相机使用不同的 YCbCr 标准。
由于 Jpegant 库带有一个 RGB 示例,如果我通过提供的示例将我的 YCbCr 值转换为 RGB,然后再将 rgb 转换为 YCbCr(然后是 JPEG),我会得到一个不错的结果。
有没有办法从我的相机 YCbCr(或任何其他 YCbCr 标准)中获取 jpeg-YCbCr?
编辑:
相机以 4:2:2 格式向我发送 YCbCr(这意味着两个连续像素共享相同的 Cb 和 Cr 通道),我继续将它们下采样到 4:2:0 ;
将这些样本编码为 jpeg 并获得粉紫色图像;
我以这种方式将相机 YCbCr 转换为 RGB:
.
R = Y + 1.402 * (Cr - 128)
G = Y + 1.772 * (Cb - 128)
B = Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr- 128)
这些值很好,我检查了。然后我使用库示例提供的公式将它们转换回 YCbCr:
Y' = 0.299*R + 0.587*G + 0.114*B
Cb' = -0.1687*R - 0.3313*G + 0.5*B + 128
Cr' = 0.5*R - 0.4187*G - 0.0813*B + 128
使用新值,它可以正确编码。
YCbCr 值示例:
前:
156 144 145
后:
177 105 129
