本程序用于批量调节图像曝光度、锐利度、对比度、亮度,可视化进行,方便找到最佳值。这些参数在应用到其他程序时,需根据程序中乘的系数换算,不然得不到理想效果。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# python3.7
# author:FistQ
# Date: 2019/10/11
import cv2
import numpy as np
import os
def Contrast_and_Brightness(alpha, beta, img):
blank = np.zeros(img.shape, img.dtype)
# dst = alpha * img + beta * blank
dst = cv2.addWeighted(img, alpha, blank, 1-alpha, beta)
return dst
def Img_Adjust(GAMMA,SHARPEN, CONTRAST, BRIGHTNESS,img):
kernel = np.array([[0, -1, 0],
[-1, SHARPEN, -1],
[0, -1, 0]], np.float32) # 定义一个核
dst = Contrast_and_Brightness(CONTRAST, BRIGHTNESS, img)
res = cv2.filter2D(dst, -1, kernel=kernel)
res = gamma_trans(res, GAMMA)
return res
def gamma_trans(img,gamma):#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)#颜色值为整数
return cv2.LUT(img,gamma_table)#图片颜色查表。另外可以根据光强(颜色)均匀化原则设计自适应算法。
def nothing(x):
pass
if __name__ == '__main__':
cv2.namedWindow("demo", 0)
cv2.createTrackbar('Gamma', 'demo', 100, 1000, nothing)
cv2.createTrackbar('Sharpen', 'demo', 15, 100, nothing)
cv2.createTrackbar('Contrast', 'demo', 20, 100, nothing)
cv2.createTrackbar('Brightness', 'demo', 6, 100, nothing)
data_base_dir = "./images/error" # 输入文件夹的路径
outfile_dir = "./images/out" # 输出文件夹的路径
processed_number = 0 # 统计处理图片的数量
print("press enter to make sure your operation and process the next picture")
for file in os.listdir(data_base_dir): # 遍历目标文件夹图片
read_img_name = data_base_dir + '//' + file.strip() # 取图片完整路径
image = cv2.imread(read_img_name) # 读入图片
while 1:
flag = cv2.getTrackbarPos('Key', 'demo')
value_of_gamma = cv2.getTrackbarPos('Gamma', 'demo')
value_of_gamma = value_of_gamma * 0.01
value_of_sharpen = cv2.getTrackbarPos('Sharpen', 'demo')
value_of_sharpen = value_of_sharpen * 0.5
value_of_contrast = cv2.getTrackbarPos('Contrast', 'demo')
value_of_contrast = value_of_contrast * 0.01
value_of_brightness = cv2.getTrackbarPos('Brightness', 'demo')
value_of_brightness = value_of_brightness* 0.5 # image_gamma_correct = gamma_trans(image, value_of_gamma)
image_gamma_correct = Img_Adjust(value_of_gamma,value_of_sharpen, value_of_contrast, value_of_brightness, image)
cv2.imshow("demo", image_gamma_correct)
k = cv2.waitKey(1)
if k == 13: # 按回车键确认处理、保存图片到输出文件夹和读取下一张图片
processed_number += 1
# out_img_name = outfile_dir + '//' + "%d.png"%(value_of_gamma*100)
out_img_name = outfile_dir + '//' + "%d_" % (value_of_gamma * 100) + file.strip()
cv2.imwrite(out_img_name, image_gamma_correct)
print("The number of photos which were processed is ", processed_number)
break
elif k == 27:
cv2.destroyAllWindows()
效果图如下:
参考链接:批量调整图片的曝光率