OpenCV Brightness&像Gimp一样对比

时间:2015-11-21 22:19:43

标签: python-2.7 opencv gimp

我希望在Gimp中调整Python的OpenCV中的对比度。我想这样做: enter image description here

在Gimp中很简单。我只使用Colors->Brightness & Contrast,并将对比度设置为127。 但我不知道如何在Python中执行此操作,我找不到任何解决此问题的方法。

2 个答案:

答案 0 :(得分:1)

检查here。公式是:

new_value = (old_value - 0.5) × contrast + 0.5 + brightness

在python中,您可以轻松地将这些应用为矩阵运算。请注意,此处的像素值为[0,1],因此当范围为[0,255]时,0.5等于127。

在同一个链接中也报告了代码,以像素方式操作(我只是为了完整性而复制):

function transform(value, brightness, contrast)
  return (value-0.5)*contrast+0.5+brightness
end

function transform_rgb(r,g,b, brightness, contrast)
  return transform(r, brightness, contrast), transform(g, brightness, contrast), transform(b, brightness, contrast)
end

function bcontrast_get_rgb(x,y,brightness, contrast)
   r,g,b=get_rgb(x,y)
   return transform_rgb(r,g,b, brightness, contrast)
end

function bcontrast(brightness, contrast)
    for y=0, height-1 do
      for x=0, width-1 do
        set_rgb(x,y, bcontrast_get_rgb(x,y,brightness,contrast))
      end
    end
    flush ()
end

bcontrast(0.25, 2.0)

答案 1 :(得分:0)

GIMP使用的对比度和亮度公式已在以下文件中定义:https://github.com/GNOME/gimp/blob/GIMP_2_10_10/app/operations/gimpoperationbrightnesscontrast.c

  if (brightness < 0.0)
    value = value * (1.0 + brightness);
  else
    value = value + ((1.0 - value) * brightness);

  value = (value - 0.5) * slant + 0.5;

哪里

  brightness = config->brightness / 2.0;
  slant = tan ((config->contrast + 1) * G_PI_4);

假设事先将图像标准化为[0,1]范围。