python实现图像自动Gamma校正方式

 更新时间:2023年10月12日 15:51:32   作者:Fly~~  
这篇文章主要介绍了python实现图像自动Gamma校正方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python图像自动Gamma校正

关于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))

总结

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

相关文章

  • 解决Python中导入自己写的类,被划红线,但不影响执行的问题

    解决Python中导入自己写的类,被划红线,但不影响执行的问题

    这篇文章主要介绍了解决Python中导入自己写的类,被划红线,但不影响执行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python函数中不定长参数的写法

    Python函数中不定长参数的写法

    今天小编就为大家分享一篇关于Python函数中不定长参数的写法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python使用Docling库玩转文档处理

    Python使用Docling库玩转文档处理

    Docling 是一个强大的 Python 第三方库,专注于文档处理和转换,所以本文将带大家深入了解 Docling 的强大功能,展示它如何帮助我们高效处理文档,感兴趣的可以了解下
    2025-02-02
  • DRF之请求与响应的实现

    DRF之请求与响应的实现

    本文主要介绍了DRF请求与响应的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • 老生常谈Python序列化和反序列化

    老生常谈Python序列化和反序列化

    下面小编就为大家带来一篇老生常谈Python序列化和反序列化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 深入理解python函数递归和生成器

    深入理解python函数递归和生成器

    下面小编就为大家带来一篇深入理解python函数递归和生成器。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Python爬虫爬取煎蛋网图片代码实例

    Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Pandas多级索引的实现示例

    Pandas多级索引的实现示例

    Pandas 中的多级索引是一种强大的工具,用于处理具有多个维度或层次的数据,本文主要介绍了Pandas多级索引的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Python实现解压当天创建的ZIP文件到指定文件夹中

    Python实现解压当天创建的ZIP文件到指定文件夹中

    这篇文章主要为大家详细介绍了Python如何实现解压当天创建的ZIP文件到指定文件夹中,文中的示例代码讲解详细,需要的小伙伴可以参考下
    2024-03-03
  • Python排序搜索基本算法之希尔排序实例分析

    Python排序搜索基本算法之希尔排序实例分析

    这篇文章主要介绍了Python排序搜索基本算法之希尔排序,简单说明了希尔排序的原理并结合实例形式分析了Python实现希尔排序的具体操作技巧,需要的朋友可以参考下
    2017-12-12

最新评论