【问题标题】:OpenCV: Set brightness of each RGB pixel so brightest channel (R, G, or B) is at maximumOpenCV:设置每个 RGB 像素的亮度,使最亮的通道(R、G 或 B)处于最大值
【发布时间】:2020-02-13 15:07:13
【问题描述】:

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

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

(顺便说一句,我在 EmguCV 中使用 C#,但直接使用 Python/OpenCV 答案就可以了。编辑:但我不能使用 Python 库)

【问题讨论】:

    标签: opencv


    【解决方案1】:

    在 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() 所以在rgb):

    输出:

    【讨论】:

    • 所以这会分别“标准化”每个像素的三个通道,而不是标准化整个图像? (另外,不幸的是,我必须在 C# 中执行此操作,所以我不能使用其他 Python 库,如 numpy)
    • 嗯,这不是标准化整个图像吗?我需要根据每个像素的通道值分别对其进行归一化。
    • 这会将每个像素分别归一化,因为max被接管了最后一个维度(通道)
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多