关于Gamma:伽玛校正是一种动态范围内亮度的非线性存储/恢复算法,即对输入值进行非线性运算,使输出值呈指数相关到输入值;从效果上来说,Gamma校正是调整图像的整体亮度,未经校正的图像可能会显得太亮或太暗,所以想要图像显示更完美,Gamma校正非常重要。Gamma校正的计算过程如下:`output=〖input〗^(1/Gamma)`利用上述指数函数对每个像素点的RGB值进行变换。具体执行如下转换公式(假设像素值范围为0~255):`R=〖255X(R/255)〗^((1/gamma))G=〖255X(G/255)〗^((1/gamma))B=〖255X(B/255)〗^((1/gamma))`一般gamma校正都是通过手动调整gamma值来完成的,但是如果图片很多,可以手动设置它的伽马值太麻烦了。这时就需要使用自动Gamma校正,将RGB图像转换为灰度图像,计算灰度图像的数据均值,通过如下计算公式计算出gamma值。`gamma_val=math.log10(0.5)/math.log10(mean/255)`python实现:importcv2importnumpyasnpimportmathimportosdefgamma_trans(img,gamma):#gamma函数处理gamma_table=[np.power(x/255.0),gamma)*255.0forxinrange(256)]#创建映射表gamma_table=np.round(np.array(gamma_table)).astype(np.uint8)#颜色值为整数returncv2.LUT(img,gamma_table)#图像颜色查找表。此外,还可以根据光强(颜色)均匀性原则设计自适应算法。defnothing(x):passdata_base_dir=r'./1'#输入文件夹路径outfile_dir=r'./2'#输出文件夹路径list=os.listdir(data_base_dir)list.sort()list2=os.listdir(outfile_dir)list2.sort()forfileinlist:#遍历目标文件夹图片read_img_name=data_base_dir+'/'+file.strip()#取图片完整路径image=cv2.imread(read_img_name)#读入图片img_gray=cv2.imread(read_img_name,0)#读取灰度图像,用于计算gamma值mean=np.mean(img_gray)gamma_val=math.log10(0.5)/math.log10(mean/255)#公式计算gammaimage_gamma_correct=gamma_trans(image,gamma_val)#伽玛变换out_img_name=outfile_dir+'/'+file.strip()cv2.imwrite(out_img_name,image_gamma_correct)print("处理的照片是{}".format(file))
