我试图从 BGR 转换为 YCrCb 以增加亮度并将其转换回 BGR
cvSplit(亮度, y, cr, cb, 0); << 拆分不需要按顺序吧?
...对亮度分量做一些事情
cvMerge(temp_y, cr, cb, 0, luma); << 亮度、Cr 和 Cb 的正确顺序是什么?
我试图从 BGR 转换为 YCrCb 以增加亮度并将其转换回 BGR
cvSplit(亮度, y, cr, cb, 0); << 拆分不需要按顺序吧?
...对亮度分量做一些事情
cvMerge(temp_y, cr, cb, 0, luma); << 亮度、Cr 和 Cb 的正确顺序是什么?
要在不同的颜色空间之间进行转换,您需要使用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)