使用Gamma校正来改变图片亮度
import cv2
import numpy as np
def gamma_trans(img,gamma):#gamma大于1时图片变暗,小于1图片变亮
#具体做法先归一化到1,然后gamma作为指数值求出新的像素值再还原
gamma_table = [np.power(x/255.0,gamma)*255.0 for x in range(256)]
gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
#实现映射用的是Opencv的查表函数
return cv2.LUT(img,gamma_table)
img = cv2.imread('000011.jpg', cv2.IMREAD_COLOR) # 打开文件
# 执行Gamma矫正,小于1的值让暗部细节大量提升,同时亮部细节少量提升
img_corrected = gamma_trans(img, 0.5)
cv2.imshow('a1',img_corrected)
cv2.imshow('as1',img)
img_corrected = gamma_trans(img, 2)
cv2.imshow('a1g',img_corrected)
cv2.waitKey(0)
https://blog.csdn.net/xiaogao_47/article/details/90261010
线性改变亮度
def liner_trans(img,gamma):#gamma大于1时图片变亮,小于1图片变暗
img=np.float32(img)*gamma//1
img[img>255]=255
img=np.uint8(img)
return img
import os
import math
from PIL import Image, ImageStat, ImageEnhance
import sys
# 读取图片原有的亮度值
def brightness(path):
im = Image.open(path)
stat = ImageStat.Stat(im)
r,g,b = stat.mean
return math.sqrt(0.241*(r**2) + 0.691*(g**2) + 0.068 *(b**2))
# 获取文件亮度平均值
def brightness_avg(path):
os.chdir(path)
sum = 0.0
img_len = len(os.listdir())
for name_list_image in os.listdir():
if name_list_image.endswith(".jpg"):
image_url = os.getcwd()+'/'+name_list_image
b = brightness(image_url)
sum+=b
print('%s=%s' %(image_url,b))
avg = sum/img_len
return avg
# 设置图片亮度
def set_brightness(b_avg,dir):
for name_list_image in os.listdir():
if name_list_image.endswith(".jpg"):
image_url = os.getcwd()+'/'+name_list_image
im = Image.open(image_url)
im = ImageEnhance.Brightness(im).enhance(b_avg / brightness(image_url))
# dir = r'C:\Users\Smart\Desktop\image\new'
flag=os.path.exists(dir)
if not flag:
os.mkdir(dir)
im.save(dir+'/'+name_list_image)
def main(path,dir):
# b_avg = brightness_avg(path)
# print(b_avg)
b_avg=50
set_brightness(b_avg,dir)
if __name__ == "__main__":
# path = r'图片文件路径'
# dir = r'图片处理后的文件路径'
path='.'
dir='2'
# for i in range(1, len(sys.argv)):
# path = sys.argv[i]
# dir = sys.argv[i+1]
# break
main(path,dir)
更多内容请关注公众号,了解嵌入式ai前沿资讯!