1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python数字图像处理之对比度与亮度调整示例

Python数字图像处理流程及常见问题

作为本站的小编,我来为大家详细介绍Python数字图像处理的一些问题,包括对比度和亮度的调整,以及提供具体的实例。

python数字图像处理之对比度与亮度调整示例

skimage包的exposure模块

对于图像明亮度和对比度的调整,可以使用skimage包的exposure模块。

gamma调整

使用幂运算对原图像像素进行处理,得到新的像素值。可以通过设置gamma值来调整图像的明暗程度。

如果gamma>1,新图像比原图像暗;如果gamma<1,新图像比原图像亮。

函数格式为:skimage.exposure.adjust_gamma(image,gamma=1),其中gamma参数默认为1,原像不发生变化。

下面是一个调暗和调亮的实例:

from skimage import data,exposure,img_as_float
import matplotlib.pyplot as plt
image=img_as_float(data.moon())
gam1=exposure.adjust_gamma(image,2)#调暗
gam2=exposure.adjust_gamma(image,0.5)#调亮
plt.figure('adjust_gamma',figsize=(8,8))
plt.subplot(131)
plt.title('origin image')
plt.imshow(image,plt.cm.gray)
plt.axis('off')
plt.subplot(132)
plt.title('gamma=2')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')
plt.subplot(133)
plt.title('gamma=0.5')
plt.imshow(gam2,plt.cm.gray)
plt.axis('off')
plt.show()

log对数调整

与gamma相反,使用log函数进行调整。

函数格式为:skimage.exposure.adjust_log(image)

下面是一个对数调整的实例:

from skimage import data,exposure,img_as_float
import matplotlib.pyplot as plt
image=img_as_float(data.moon())
gam1=exposure.adjust_log(image)#对数调整
plt.figure('adjust_gamma',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(image,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('log')
plt.imshow(gam1,plt.cm.gray)
plt.axis('off')
plt.show()

判断图像对比度是否偏低

使用is_low_contrast(img)函数,返回一个bool型值。

from skimage import data,exposure
image=data.moon()
result=exposure.is_low_contrast(image)
print(result)

输出为false,表示图像对比度不偏低。

调整强度

使用rescale_intensity(image,in_range=’image’,out_range=’dtype’)函数进行调整。

in_range表示输入图片的强度范围,out_range表示输出图片的强度范围。默认情况下,输入图片的[min,max]范围被拉伸到[dtype.min,dtype.max]。

可以通过img_as_float()函数将unit8类型转换为float型,也可以直接乘以1.0实现类型转换。

下面是一些实例:

import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
mat=exposure.rescale_intensity(image)
print(mat)

输出为[0 127 255],即像素的最小值由51变为0,最大值由153变为255。整体进行了拉伸,但数据类型没有变,还是uint8。

import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
tmp=image*1.0
mat=exposure.rescale_intensity(tmp)
print(mat)

输出为[0. 0.5 1.],即像素的范围被拉伸到[0,1]。

import numpy as np
from skimage import exposure
image=np.array([51,102,153],dtype=np.uint8)
tmp=image*1.0
mat=exposure.rescale_intensity(tmp,in_range=(0,255))
print(mat)

输出为[0.2 0.4 0.6],即原像素值被除以255。

如果想等比例缩小,可以使用in_range参数;如果想将图像中的负数调整到正数范围内,可以使用out_range参数。

希望这篇文章可以对图像处理感兴趣的朋友提供一些帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6813.html