如何使用python+OpenCV快速改变图像亮度?

2024-05-16 20:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列的图像。我需要平均这些图像的亮度。

第一个示例(非常慢):

img = cv2.imread('test.jpg') #load rgb image
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #convert it to hsv

for x in range(0, len(hsv)):
    for y in range(0, len(hsv[0])):
        hsv[x, y][2] += value

img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite("image_processed.jpg", img)

第二个示例(快速)

hsv += value

这个例子很快,但是它改变了所有的值HSV(我只需要改变V(亮度))


Tags: in图像image示例imgforlenvalue
3条回答

我知道这个问题有点老了,但我想我可以发布对我有效的完整解决方案(通过在255处饱和来处理溢出情况):

def increase_brightness(img, value=30):
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(hsv)

    lim = 255 - value
    v[v > lim] = 255
    v[v <= lim] += value

    final_hsv = cv2.merge((h, s, v))
    img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
    return img

这可以如下使用:

frame = increase_brightness(frame, value=20)

^{}只选择第三个通道,然后修改这些元素-

hsv[:,:,2] += value

其他答案建议使用各种numpy魔法“手动”完成饱和,但也可以使用cv2.add()并让OpenCV为您处理:

import cv2
import numpy as np

image = cv2.read('image.png')
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
value = 42 #whatever value you want to add
cv2.add(hsv[:,:,2], value, hsv[:,:,2])
image = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite('out.png', image)

相关问题 更多 >