python快速实现图像矫正,python实现图像自动Gamma校正-SDK社区

关于Gamma:

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值显得过于麻烦,这时候就需要采用自动Gamma矫正,将RGB图片转成灰度图,计算灰度图的数据均值,通过下面的计算公式计算gamma值。`gamma_val = math.log10(0.5) / math.log10(mean / 255)`

python实现:import cv2

import numpy as np

import math

import os

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

data_base_dir = r'./1' # 输入文件夹的路径

outfile_dir = r'./2' # 输出文件夹的路径

list = os.listdir(data_base_dir)

list.sort()

list2 = os.listdir(outfile_dir)

list2.sort()

for file in list: # 遍历目标文件夹图片

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) # 公式计算gamma

image_gamma_correct = gamma_trans(image, gamma_val) # gamma变换

out_img_name = outfile_dir + '/' + file.strip()

cv2.imwrite(out_img_name, image_gamma_correct)

print("The photo which is processed is {}".format(file))

SDK社区是一个中立的社区,这里有多样的前端知识,有丰富的api,有爱学习的人工智能开发者,有风趣幽默的开发者带你学python,还有未来火热的鸿蒙,当各种元素组合在一起,让我们一起脑洞大开共同打造专业、好玩、有价值的开发者社区,帮助开发者实现自我价值!

你可能感兴趣的:(python快速实现图像矫正)