灰度变换 - 伽马变换

目录

1. 介绍

2. 代码实现

3. 提升视频的亮度


1. 介绍

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

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

形式为:s = c r^{\gamma }

其中,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()

视频效果:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值