本程序用于批量调节图像曝光度、锐利度、对比度、亮度,可视化进行,方便找到最佳值。这些参数在应用到其他程序时,需根据程序中乘的系数换算,不然得不到理想效果。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# python3.7
# author:FistQ
# Date: 2019/10/11import cv2
import numpy as np
import osdef Contrast_and_Brightness(alpha, beta, img):blank = np.zeros(img.shape, img.dtype)# dst = alpha * img + beta * blankdst = cv2.addWeighted(img, alpha, blank, 1-alpha, beta)return dstdef 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 resdef 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):passif __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.01value_of_sharpen = cv2.getTrackbarPos('Sharpen', 'demo')value_of_sharpen = value_of_sharpen * 0.5value_of_contrast = cv2.getTrackbarPos('Contrast', 'demo')value_of_contrast = value_of_contrast * 0.01value_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)breakelif k == 27:cv2.destroyAllWindows()
效果图如下:
参考链接:批量调整图片的曝光率