Python如何实现伽马矫正

 更新时间:2023年10月12日 14:35:52   作者:一米阳光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)

实现效果

总结

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

相关文章

  • TensorFlow实现数据增强的示例代码

    TensorFlow实现数据增强的示例代码

    ‌TensorFlow数据增强‌是一种通过变换和扩充训练数据的方法,本文主要介绍了TensorFlow实现数据增强的示例代码,具有一定的参考价值,感兴趣的可以了解游戏
    2024-08-08
  • 解决pycharm上的jupyter notebook端口被占用问题

    解决pycharm上的jupyter notebook端口被占用问题

    今天小编就为大家分享一篇解决pycharm上的jupyter notebook端口被占用问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python自定义模块使用.pth文件实现重用方式

    python自定义模块使用.pth文件实现重用方式

    这篇文章主要介绍了python自定义模块使用.pth文件实现重用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python requests获取网页常用方法解析

    Python requests获取网页常用方法解析

    这篇文章主要介绍了Python requests获取网页常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Django如何使用asyncio协程和ThreadPoolExecutor多线程

    Django如何使用asyncio协程和ThreadPoolExecutor多线程

    这篇文章主要介绍了Django如何使用asyncio协程和ThreadPoolExecutor多线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python3解析库BeautifulSoup4的安装配置与基本用法

    python3解析库BeautifulSoup4的安装配置与基本用法

    简单来说,BeautifulSoup就是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据,下面这篇文章主要给大家介绍了关于python3解析库BeautifulSoup4的安装配置与基本用法的相关资料,需要的朋友可以参考下
    2018-06-06
  • Python利用tkinter和socket实现端口扫描

    Python利用tkinter和socket实现端口扫描

    这篇文章主要为大家详细介绍了Python如何利用tkinter和socket实现端口扫描功能,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-12-12
  • 利用selenium 3.7和python3添加cookie模拟登陆的实现

    利用selenium 3.7和python3添加cookie模拟登陆的实现

    这篇文章主要给大家介绍了关于利用selenium 3.7和python3添加cookie模拟登陆的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 详解如何使用pandas进行时间序列数据的周期转换

    详解如何使用pandas进行时间序列数据的周期转换

    时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换,感兴趣的朋友可以参考下
    2024-05-05
  • 100行Python代码实现自动抢火车票(附源码)

    100行Python代码实现自动抢火车票(附源码)

    又到年底了,相信对于在外地的朋友们来说,火车票是到年底最头痛的一件事了,但作为程序员的你怎么能一样呢?快发挥你的特长,下面这篇文章主要给大家介绍了如果通过100行Python代码实现自动抢火车票的相关资料,需要的朋友可以参考下。
    2018-01-01

最新评论