如何使用opencv python调整亮度,对比度和振动?

时间:2018-05-22 18:31:10

标签: python opencv brightness contrast

我是图像处理新手。我在Python3中编程并使用OpenCV图像处理库。我想调整以下属性。

  1. 亮度
  2. 对比度
  3. 自然饱和
  4. 色相
  5. 饱和度
  6. 亮度
  7. 对于4,5,6。我使用以下代码转换为HSV空间。

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(hsv)
    h += value # 4
    s += value # 5
    v += value # 6
    final_hsv = cv2.merge((h, s, v))
    img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
    

    我发现1和2的唯一教程是here。本教程使用C ++,但我用Python编程。另外,我不知道如何调整3. vibrance。我非常感谢你的帮助,谢谢!。

3 个答案:

答案 0 :(得分:3)

感谢@MarkSetchell提供链接。 简而言之,答案仅使用numpy,公式可以如下所示。

  

new_image =(old_image)×(对比度/ 127 + 1) - 对比度+亮度

此处对比亮度是[-127,127]范围内的整数。标量127用于该范围。 另外,下面是我使用的代码。

brightness = 50
contrast = 30
img = np.int16(img)
img = img * (contrast/127+1) - contrast + brightness
img = np.clip(img, 0, 255)
img = np.uint8(img)

答案 1 :(得分:0)

一种简单的亮度方法,适用于 color monochrome 图像

img = cv2.imread('your path',0)
brt = 40  // value could be + or - for brightness or darkness

img[img < 255-brt] += brt    //change any value in the 2D list < max limit

cv2.imshow('img'+ img)

input image

output image

答案 2 :(得分:0)

我不确定这是否有帮助,但是为了更改亮度,对比度,我个人将图像切换为PIL.Image并使用PIL.ImageEnhance,在使用比例或百分比时会很方便。

image = PIL.Image.open("path_to_image")

#increasing the brightness 20%
new_image = PIL.ImageEnhance.Brightness(image).enhance(1.2)

#increasing the contrast 20%
new_image = PIL.ImageEnhance.Contrast(image).enhance(1.2)

我仍然没有找到一种充满活力的干净方法。有关ImageEnahance的更多信息,建议您阅读官方文档-https://pillow.readthedocs.io/en/3.0.x/reference/ImageEnhance.html

对于转化,我使用此..

注意-OpenCV使用BGR,PIL使用RGB通道。因此,如果转换不正确,可能会变得混乱。

#convert pil.image to opencv (numpy.ndarray)
#need numpy library for this
cv_image = numpy.array(pil_image)

#convert opencv to pil.image

image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB)
pil_image = Image.fromarray(image)