python
主页 > 脚本 > python >

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

2022-10-20 | 佚名 | 点击:

1. 介绍

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

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

形式为:

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

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

通过观察可以发现

2. 代码实现

1

2

3

4

5

6

7

8

9

10

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. 提升视频的亮度

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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()

视频效果:

原文链接:https://blog.csdn.net/qq_44886601/article/details/127152459
相关文章
最新更新