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

1930 0
Honkers 2022-11-9 16:54:31 | 显示全部楼层 |阅读模式
目录

    1. 介绍2. 代码实现3. 提升视频的亮度


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伽马变换内容请搜索中国红客联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持中国红客联盟!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4004
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行