Pav*_*vel 14 python opencv numpy image-processing
我有一系列的图像.我需要平均这些图像的亮度.
第一个例子(非常慢):
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)
Run Code Online (Sandbox Code Playgroud)
第二个例子(快速)
hsv += value
Run Code Online (Sandbox Code Playgroud)
这个例子非常快但它改变了所有值HSV(我只需改变V(亮度))
小智 22
我知道这个问题有点旧,但我想我可能会发布适用于我的完整解决方案(通过在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
Run Code Online (Sandbox Code Playgroud)
这可以使用如下:
frame = increase_brightness(frame, value=20)
Run Code Online (Sandbox Code Playgroud)
Div*_*kar 18
Slice 选择第三个通道,然后修改这些元素 -
hsv[:,:,2] += value
Run Code Online (Sandbox Code Playgroud)
其他答案建议使用各种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)
Run Code Online (Sandbox Code Playgroud)
迭代整个图像进行更改在opencv中不是一个非常可扩展的选项,Opencv提供了许多方法和函数来对给定图像执行算术运算.
您可以简单地将转换后的HSV图像分割为各个通道,然后相应地处理V通道:
img = cv2.imread('test.jpg') #load rgb image
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #convert it to hsv
h, s, v = cv2.split(hsv)
v += 255
final_hsv = cv2.merge((h, s, v))
img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
cv2.imwrite("image_processed.jpg", img)
Run Code Online (Sandbox Code Playgroud)
小智 5
这是我增加和减少亮度的解决方案。其他几个答案有一些错误问题。函数接收正值或负值并改变亮度。
代码示例
img = cv2.imread(path_to_image)
img = change_brightness(img, value=30) #increases
img = change_brightness(img, value=-30) #decreases
Run Code Online (Sandbox Code Playgroud)
被调用的函数
def change_brightness(img, value=30):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
v = cv2.add(v,value)
v[v > 255] = 255
v[v < 0] = 0
final_hsv = cv2.merge((h, s, v))
img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
return img
Run Code Online (Sandbox Code Playgroud)