【问题标题】:How to adjust brightness and contrast using min and max values using OpenCV如何使用 OpenCV 使用最小值和最大值调整亮度和对比度
【发布时间】:2015-05-01 02:50:10
【问题描述】:

在 ImageJ 中,您可以使用最小值和最大值调整图像的亮度和对比度。您还可以使用setMinAndMax() 宏功能。对话框如下所示:

它将每个像素映射到最小值和最大值之间。

我正在尝试在 OpenCV (C++) 中做同样的事情。我可以使用Mat::convertTo()alphabeta 参数来更改对比度和亮度,但我不知道如何使用最小值和最大值。

就我而言,我使用的是 12 位图像,因此像素值的范围是 0 到 4095。我不确定这是否重要。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    你这样做。

    首先,找到当前的最大值和最小值。

    假设最暗和最亮分别是 80 和 220。现在您需要将此范围 80..220 扩展到整个范围 0..4095。

    因此,您从图像中的每个像素中减去 80,以在直方图的左端向下移动到零,因此您的范围现在是 0..140。

    现在您需要将每个像素乘以 4095/140 以将右端拉伸到 4095。

    实际上,您需要的公式是这样的:

    newvalue = int((current value - darkest)*4095/(brightest-darkest))
    

    【讨论】:

    • 是的,我认为你的帖子和@theamk 的帖子都是正确的,但我需要你的解释才有意义。 ;-)
    【解决方案2】:

    分三步完成:

    • 使用 minMaxLoc 获取当前最小值/最大值
    • 通过向图像添加差异来调整“min”值(没有特殊功能,只需在 C++ 或 python 中执行“image = image + offset”)
    • 通过缩放图像来调整“最大值”(无特殊功能,“图像 = 图像 * 缩放”)

    【讨论】:

    • 我认为您需要从当前图像中减去偏移量,而不是添加它。
    • 这完全取决于您如何定义偏移量——(new_min - old_min) 或 (old_min - new_min)。它可以以任何一种方式工作。
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2023-04-07
    • 1970-01-01
    • 2012-05-20
    • 2017-08-27
    相关资源
    最近更新 更多