BGR与YCrCb之间的转换以及BGR之间的转换

时间:2012-04-04 12:37:54

标签: opencv

我试图将BGR转换为YCrCb以增加亮度并将其转换回BGR

cvSplit(luma,y,cr,cb,0); <<拆分不需要按顺序吗?

...对亮度组件做一些事情

cvMerge(temp_y,cr,cb,0,luma); <<什么是正确的亮度顺序,Cr和Cb?

1 个答案:

答案 0 :(得分:4)

要在不同的颜色空间之间进行转换,您需要使用cvtColor。要从BGR到YCC,您应该传递参数CV_BGR2YCrCb(并再次返回CV_YCrCb2BGR)。正确的用法是:

cvtColor(src, dest, CV_BGR2YCrCb)

src是您的源框架,而dest将是您已处理的框架(您可以在此处放置src以便进行更改)。

cvSplit不是你需要的,因为它只是将一个多通道数组分成几个单通道数组(它的组件)。因此,如果您有一个BGR视频帧,cvSplit可以单独为您提供B,G,R频道。

如果你想单独处理Y通道,你可以转换颜色空间,然后拆分然后合并,如下所示:

cvtColor(frame, frame, CV_BGR2YCrCb)
cvSplit(frame, Y, Cr, Cb, NULL)
#Process the Y channel here.
cvMerge(Y, Cr, Cb, NULL, frame)
cvtColor(frame, frame, CV_YCrCb2BGR)

如果您只是想提高图像的亮度,更简单的方法(您不需要使用亮度)就是为每个通道添加一个缩放器:

cvAddS(frame, cvScalar(30,30,30), frame)