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


Posted in Python onJune 28, 2022

skimage包的exposure模块

图像亮度与对比度的调整,是放在skimage包的exposure模块里面

1、gamma调整

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

对原图像的像素,进行幂运算,得到新的像素值。公式中的g就是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()

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

2、log对数调整

这个刚好和gamma相反

原理:I=log(I)

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

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

3、判断图像对比度是否偏低

函数:is_low_contrast(img)

返回一个bool型值

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

输出为False

4、调整强度

函数:

skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')

in_range 表示输入图片的强度范围,默认为'image', 表示用图像的最大/最小像素值作为范围

out_range 表示输出图片的强度范围,默认为'dype', 表示用图像的类型的最大/最小值作为范围

默认情况下,输入图片的[min,max]范围被拉伸到[dtype.min, dtype.max],如果

dtype=uint8, 那么dtype.min=0, dtype.max=255

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

前面我们讲过,可以通过img_as_float()函数将unit8类型转换为float型,实际上还有更简单的方法,就是乘以1.0

import numpy as np
image = np.array([51, 102, 153], dtype=np.uint8)
print(image*1.0)

即由[51,102,153]变成了[  51.  102.  153.]

而float类型的范围是[0,1],因此对float进行rescale_intensity 调整后,范围变为[0,1],而不是[0,255]

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. &nbsp; 0.5  1. ]

如果原始像素值不想被拉伸,只是等比例缩小,就使用in_range参数,如:

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的[main,max]范围要比原始像素值的范围[min,max] 大或者小,那就进行裁剪,如:

mat=exposure.rescale_intensity(tmp,in_range=(0,102))
print(mat)

输出[ 0.5  1.   1. ],即原像素值除以102,超出1的变为1

如果一个数组里面有负数,现在想调整到正数,就使用out_range参数。如:

import numpy as np
from skimage import exposure
image = np.array([-10, 0, 10], dtype=np.int8)
mat=exposure.rescale_intensity(image, out_range=(0, 127))
print(mat)

输出[  0  63 127]

以上就是python数字图像处理之对比度与亮度调整示例的详细内容,更多关于python数字图像对比度亮度调整的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
pandas去除重复列的实现方法
Jan 29 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Django logging配置及使用详解
Jul 23 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Pandas的Apply函数具体使用
Jul 21 Python
详解Python IO编程
Jul 24 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
python实现excel公式格式化的示例代码
Dec 23 Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
python数字图像处理数据类型及颜色空间转换
python数据分析之单因素分析线性拟合及地理编码
You might like
thinkphp学习笔记之多表查询
2014/07/28 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
铭万公司.net面试题笔试题
2014/07/20 面试题
什么是.net
2015/08/03 面试题
面向对象设计的原则是什么
2013/02/13 面试题
大专生自荐信
2013/10/04 职场文书
后勤副校长自我鉴定
2013/10/13 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
校本教研活动总结
2014/07/01 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
工作检讨书范文
2015/01/23 职场文书
语文教师求职信范文
2015/03/20 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
PHP解决高并发问题
2021/04/01 PHP
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android