近期在图片处理环节的时候,遇见了一个调整图片亮度的问题,这里需要调整整个图片的亮度,使得整体亮度较为均匀,根据网上查找,我最后确定使用gamma校正的方法来完成这个任务。
首先需要知道gamma校正是什么原理:
简单来说,也就是调整一个参数,对图片中的每个像素根据这个gamma参数做出调整,而这个调整
的原理就是原像素的灰度值的gamma次方,所以就可以解释图片中的三个结果了,当gamma小于1的时
候,很明显a^gamma > a(a<1, a是通过运算得到a = gray / 255.0),这样就会让整体的亮度提升,并且
也可以预见到,当像素的灰度值越低(暗),运算的结果就越明显,而比较亮的部分(灰度值比较高)
的整体的提升就比较少。同样的对于gamma大于1的时候就就会有相反的效果。
下面贴出我们的代码:
#-*-coding: UTF-8-*-
import numpy as np
import cv2
import math
from matplotlib import pyplot as plt
#import Recognise
#读取图片
img = cv2.imread('5.jpg')
#将原图片(RGB)转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#显示并保存
cv2.imshow('gray', gray)
cv2.imwrite('gray.jpg', gray)
#将灰度图做gamma校正运算
image = np.power(gray/255.0, 1/2.2)
cv2.imshow('imagechange', image)
#由于后面需要进行类型转换,转换成uint8,所以需要对其乘以255处理
image = image * 255
cv2.imwrite('imagechange.jpg',image)
#这里需要将image->转换为uint8类型,因为会出现类型不匹配
gray2rgb = cv2.cvtColor(image.astype(np.uint8), cv2.COLOR_GRAY2RGB)
#保存图片
cv2.imwrite('gray2rgb.jpg', gray2rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
5.jpg gray.jpg gray2rgb.jpg imagechange.jpg
版权声明:本文为qq_35044509原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。