【opencv】图像处理之伽马变换

■ 概述

      伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算(r,s分别代表输入和输出灰度):
在这里插入图片描述

      伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:
      1)gamma值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分。
      2)gamma值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分。

在这里插入图片描述
      γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。

opencv实现代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('./dark.jpg',0)

plt.figure(figsize=(15,15))
plt.subplot(131)
plt.title('gamma = 1')    
plt.imshow(img, cmap = 'gray')   # 原图

# 默认gamma值为1.0,默认不变化   
def adjust_gamma(image, gamma=1.0):
    invgamma = 1/gamma
    brighter_image = np.array(np.power((image/255), invgamma)*255, dtype=np.uint8)
    return brighter_image

# gamma大于1,变亮
img_gamma = adjust_gamma(img, gamma=3.0) 
plt.subplot(132)
plt.title('gamma > 1')
plt.imshow(img_gamma, cmap="gray")

# gamma小于1,变暗
img_gamma = adjust_gamma(img, gamma=0.5) 
plt.subplot(133)
plt.title('gamma < 1')
plt.imshow(img_gamma, cmap="gray")

plt.show()

输出:
在这里插入图片描述

■ 讨论

      如果想让图像变亮,直接把每个像素值+100不就可以了吗?

实验:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('./dark.jpg',0)
plt.imshow(img + 100, cmap="gray")
plt.show()

输出:
在这里插入图片描述原因:
      如果直接将所有像素值+100的话,假如有的像素值大于155,+100之后将会超过255!最终将会导致有些亮的地方会变黑。

例:np.array(355, dtype=np.uint8) --> array(99, dtype=uint8)

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值