BGR到YCrCb之间的转换,再回到BGR

Mzk*_*Mzk 2 opencv

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

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

...对亮度分量做一些事情

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

fra*_*xel 5

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

cvtColor(src, dest, CV_BGR2YCrCb)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

如果您只想增加图像的亮度,则一种更简单的方法(无需使用亮度)是在每个通道中添加缩放器:

cvAddS(frame, cvScalar(30,30,30), frame)
Run Code Online (Sandbox Code Playgroud)