我试图将BGR转换为YCrCb以增加亮度并将其转换回BGR
cvSplit(luma,y,cr,cb,0); <<拆分不需要按顺序吗?
...对亮度组件做一些事情
cvMerge(temp_y,cr,cb,0,luma); <<什么是正确的亮度顺序,Cr和Cb?
答案 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)