![](/img/trans.png)
[英]How to auto adjust contrast and brightness of a scanned Image with opencv python
[英]How do I adjust brightness, contrast and vibrance with opencv python?
我是图像处理的新手。 我在Python3中编程并使用OpenCV图像处理库。我想调整以下属性。
对于 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 找到的唯一教程就在这里。 教程用的是C++,我编程的是Python。另外,不知道怎么调3.vibrance。 我非常感谢您的帮助,谢谢..
感谢@MarkSetchell 提供链接。 简而言之,答案仅使用 numpy,公式可以如下所示。
new_image = (old_image) × (contrast/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)
这是在 Python/OpenCV 中实现活力的一种方法。
转换为 HSV。 然后创建一个 sigmoid function LUT。
(S 形 function 从原点线性增加,但随后逐渐变平。)
参见https://en.wikipedia.org/wiki/Sigmoid_function
将 LUT 应用于 S 通道。
转换回 BGR。
输入:
import cv2
import numpy as np
# read image
img = cv2.imread('yellow_building.jpg')
# convert image to hsv colorspace as floats
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
print(np.amax(s), np.amin(s), s.dtype)
# set vibrance
vibrance=1.4
# create 256 element non-linear LUT for sigmoidal function
# see https://en.wikipedia.org/wiki/Sigmoid_function
xval = np.arange(0, 256)
lut = (255*np.tanh(vibrance*xval/255)/np.tanh(1)+0.5).astype(np.uint8)
# apply lut to saturation channel
new_s = cv2.LUT(s,lut)
# combine new_s with original h and v channels
new_hsv = cv2.merge([h,new_s,v])
# convert back to BGR
result = cv2.cvtColor(new_hsv, cv2.COLOR_HSV2BGR)
# save output image
cv2.imwrite('yellow_building_vibrance.jpg', result)
# display images
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
我不确定这是否会有所帮助,但是为了改变亮度,对比度,我个人将图像切换到 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)
我仍然没有为 Vibrance 找到一个干净的方法。 有关 ImageEnahance 的更多信息,我建议阅读官方文档 - https://pillow.readthedocs.io/en/stable/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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.