opencv 修改图像对比度、图像亮度
图像亮度
以灰度图像为例,图像亮度指的是图像的明暗程度,图像的像素值整体越接近于255,图像越亮,反之越接近于0,图像越暗。
图像对比度
假设灰度图像的像素值的范围为[a,b],如果b-a的值越接近于255,图像对比度越大,看上去图像更清晰;反之越接近于0,图像越不清晰。
修改图像的亮度和对比度
OpenCV中亮度和对比度应用这个公式来修改:g(x)=αf(x)+β,其中:α(>0)、β常称为增益与偏置值,分别控制图片的对比度和亮度。
实验:调整灰度图像亮度和对比度
# 调整灰度图像的亮度和对比度
import cv2 as cv
import numpy as np
img = cv.imread('baby_g.jpg',0)
# 增加图像亮度
# 注意需要使用cv.add(),不能直接x+y
res1 = np.uint8(np.clip((cv.add(1*img,30)), 0, 255))
# 增加图像对比度
res2 = np.uint8(np.clip((cv.add(1.5*img,0)), 0, 255))
tmp = np.hstack((img, res1, res2)) # 三张图片横向合并(便于对比显示)
cv.imshow('image', tmp)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
实验:调整彩色图像亮度和对比度
# 调整彩色图像的亮度和对比度
import cv2 as cv
import numpy as np
img = cv.imread('paojie.jpg')
img_t = cv.cvtColor(img,cv.COLOR_BGR2HSV)
h,s,v = cv.split(img_t)
# 增加图像亮度
v1 = np.clip(cv.add(1*v,30),0,255)
# 增加图像对比度
v2 = np.clip(cv.add(2*v,20),0,255)
img1 = np.uint8(cv.merge((h,s,v1)))
img1 = cv.cvtColor(img1,cv.COLOR_HSV2BGR)
img2 = np.uint8(cv.merge((h,s,v2)))
img2 = cv.cvtColor(img2,cv.COLOR_HSV2BGR)
tmp = np.hstack((img, img1, img2)) # 三张图片横向合并(便于对比显示)
cv.imshow('image', tmp)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
增加图像清晰度:图像直方图均衡化:
请参考优秀文章 灰度图像和彩色图像直方图全局均衡化和自适应均衡化
增加图像对比度:图像直方图归一化:
请参考优秀文章 图像直方图归一化