首页 > 解决方案 > OpenCV:设置每个 RGB 像素的亮度,使最亮的通道(R、G 或 B)处于最大值

问题描述

对于 RGB 图像中的每个像素,我想增加其亮度,以使该像素(R、G 或 B)的最强通道最大化。例如,如果一个像素的 RGB 值为 (128, 64, 32),最大通道值为 255,则该像素应更改为大约 (255, 128, 64)。这是一种穷人的阴影去除系统。

我可以通过显式迭代像素来做到这一点,但这非常低效。使用严格的 OpenCV 方法最有效的方法是什么?似乎它可能会使用 YUV 空间?

(顺便说一句,我在 EmguCV 中使用 C#,但是直接的 Python/OpenCV 答案会很好。编辑:但我不能使用 Python 库)

标签: opencv

解决方案


在 Python 中,OpenCV 图像只是 numpy 数组。所以这是一个 python/numpy 方法:

# toy sample
np.random.seed(1)
a = np.random.randint(0, 100, (4,4,3), dtype=np.uint8)

# get max values across channels, scaled by 255
maxx = np.max(a, axis=-1)/255

# scale a by maxx
a = (a / maxx[:,:, None]).astype(np.uint8)

输入(带有plt.imshow()so in rgb):

在此处输入图像描述

输出:

在此处输入图像描述


推荐阅读