【发布时间】:2014-03-13 09:51:39
【问题描述】:
我们有一个 Matlab 程序,它以 YCbCr 格式从相机中获取图像,然后像 RGB 图像一样保存,其中 R 值是图像的 Y 值,G 值是图像的 Cb 值,B值是图像的 Cr 值。有没有办法在 C++ openCV 中复制这个过程?
【问题讨论】:
-
你的意思是en.wikipedia.org/wiki/YCbCr,对吧?
我们有一个 Matlab 程序,它以 YCbCr 格式从相机中获取图像,然后像 RGB 图像一样保存,其中 R 值是图像的 Y 值,G 值是图像的 Cb 值,B值是图像的 Cr 值。有没有办法在 C++ openCV 中复制这个过程?
【问题讨论】:
如果 OpenCV 可以read 来自相机的图像,是的,你可以在 OpenCV 中复制这个过程。您所要做的就是确保每个通道都在可接受的范围内(8 位为 0..255)并且save 将图像添加到文件中。
关于值的范围,Cb 和 Cr 可以是负数,但 G 和 B 不能。您可以通过 shifting 解决这个问题 - 保存时向 Cb 和 Cr 添加 128(加载时执行相反的操作) - 或者通过聪明地了解哪些通道已签名和未签名。
关于保存,图像保存代码假定图像为 RGB,并按原样对 R、G、B 分量进行编码。如果您的图像是 YCbCr,则 Y 将编码为 R,Cb 编码为 G,Cr 编码为 B。图像在其他程序中打开时看起来会出错,但这是意料之中的。
【讨论】: