2

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

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

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

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

4

1 回答 1

5

要在不同的颜色空间之间进行转换,您需要使用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)
于 2012-04-04T14:47:09.033 回答