Python如何实现伽马矫正
作者:一米阳光zw
这篇文章主要介绍了Python如何实现伽马矫正问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Python实现伽马矫正
伽马矫正是一种借助了指数变换映射的增强技术。
伽马矫正的映射函数可表示为:d = T(s)= csY ,其中c和y为常数。
y的值是控制变换效果的主要因素,所以被称之为伽马矫正。
如右图所示:

- 当y 之1时,输入的低灰度范围被压缩,高灰度范围被拉伸,实现了强化亮部,压缩暗部的图像增强效果;
- 当y >1时,输入的高灰度范围被压缩,
- 低灰度范围被拉伸,实现了强化暗部,压缩亮部的图像增强效果;
gama,pY
代码实现
import numpy as np
import cv2
def gama_trans(img, gamma):
# 先归一化处理,再做伽马计算,再还原到[0,255]
gmma_list = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]
# 将列表换成nparray,换成无符号8为数
gamma_table = np.round(np.array(gmma_list)).astype(np.uint8)
return cv2.LUT(img, gamma_table)
# 定义matshow方法
def matshow(title='image', image=None, gray=False):
if isinstance(image, np.ndarray):
if len(image.shape) == 2:
pass
elif gray:
# 转换成GRAY格式
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
else:
# 图片默认BGR通道,将突破转换成RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 使用这种方式显示图片可能会导致图片显示畸形
# cv2.imshow('image', image)
plt.figure()
# 载入图像
plt.imshow(image, cmap="gray")
# 设置标题
plt.title(title)
plt.show()
if __name__ == '__main__':
im = cv2.imread('data/lena.jpg', 0)
matshow('im', im)
# 使用小于1的伽马值
im = gama_trans(im, 0.5)
matshow('im0.5', im)
# 使用大于1的伽马值
im = gama_trans(im, 3)
matshow('im3', im)实现效果

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
