Python灰度变换中伽马变换分析实现

 更新时间:2022年10月18日 16:36:23   作者:Henry_zs  
灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每个像素灰度值的方法。目的是改善画质,使图像显示效果更加清晰。图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分

1. 介绍

伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正

伽马变换针对的是对单个像素点的变换,也就是点对点的映射

形式为:

其中,s为输出的像素点的灰度值,r为输入像素点的灰度值。c 、 γ 为常数

γ 值不同的时候,对应的变换曲线如图,这里我们不关注具体函数的取值,而只是关注变换曲线的形状

通过观察可以发现

  • γ > 1 的时候,会压缩暗区的对比度,抬高亮区的对比度。并且γ越大,效果越明显
  • γ < 1 的时候,会提升暗区的对比度,压缩亮区的对比度。并且γ越小,效果越明显
  • γ = 1 的时候,图像的灰度不变(c 也为1)

2. 代码实现

import cv2
import numpy as np
def grammar(x, r):
    y = pow(x / 255 , r) * 255
    return y.astype(np.uint8)
img  = cv2.imread('./f.jpg',0)
img_grammar = grammar(img,0.6)
cv2.imshow('img',np.hstack((img,img_grammar)))
cv2.waitKey()
cv2.destroyAllWindows()

原图和 γ = 0.6 的效果

这里需要进行归一化处理,因为整数的小数次方可能会丢失精度,我们将灰度值变为(0,1)之间,转换成小数与小数的次方会更加准确。

3. 提升视频的亮度

import numpy as np
import cv2
def grammar(x , r):   #  grammar 变换
    y = pow(x / 255 , r) * 255
    return y.astype(np.uint8)
video = cv2.VideoCapture('./hand.mp4')   # 读取视频
while video.isOpened():        # 如果视频/摄像头 读取成功
    ret,frame = video.read()    # 读取每一帧
    img = grammar(frame,0.6)    # 将每一帧进行进行grammar变换
    if ret == True :           # 读取到frame的话
        cv2.imshow('img',np.hstack((frame,img)))
    key=cv2.waitKey(1)
    if key == ord('q'):        # q 退出
        break
    if key == 32:              # 空格键 暂停
        cv2.waitKey(0)
        continue
video.release()
cv2.destroyAllWindows()

视频效果:

到此这篇关于Python灰度变换中伽马变换分析实现的文章就介绍到这了,更多相关Python伽马变换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 字典一个键对应多个值的方法

    Python 字典一个键对应多个值的方法

    这篇文章主要介绍了Python 字典一个键对应多个值的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 改进Django中的表单的简单方法

    改进Django中的表单的简单方法

    这篇文章主要介绍了改进Django中的表单的简单方法,Django是Python重多人气框架中最著名的一个,需要的朋友可以参考下
    2015-07-07
  • PHP实现发送和接收JSON请求

    PHP实现发送和接收JSON请求

    本篇文章给大家分享了PHP实现发送和接收JSON请求的详细方法和实例代码,有兴趣的朋友可以参考学习下。
    2018-06-06
  • python使用super()出现错误解决办法

    python使用super()出现错误解决办法

    这篇文章主要介绍了python使用super()出现错误解决办法的相关资料,对于TypeError: must be type, not classobj的错误进行处理,需要的朋友可以参考下
    2017-08-08
  • python字符串判断密码强弱

    python字符串判断密码强弱

    这篇文章主要为大家详细介绍了python字符串判断密码强弱,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python中使用Tkinter模块创建GUI程序实例

    Python中使用Tkinter模块创建GUI程序实例

    这篇文章主要介绍了Python中使用Tkinter模块创建GUI程序实例,本文给出了创建窗口、文本框、按钮等实例,需要的朋友可以参考下
    2015-01-01
  • Python MySQL数据库连接池组件pymysqlpool详解

    Python MySQL数据库连接池组件pymysqlpool详解

    这篇文章主要跟大家介绍了关于Python MySQL数据库连接池组件pymysqlpool的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 10行Python代码计算汽车数量的实现方法

    10行Python代码计算汽车数量的实现方法

    这篇文章主要介绍了10行Python代码计算汽车数量的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 基于Python制作简单的IP查询工具

    基于Python制作简单的IP查询工具

    这篇文章主要为大家详细介绍了如何基于Python制作一个简单的IP查询工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • python3.4实现邮件发送功能

    python3.4实现邮件发送功能

    这篇文章主要为大家详细介绍了python3.4实现邮件发送功能,含带中文附件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论