Python中关于matplotlib图片的灰度处理方式

 更新时间:2023年08月15日 17:02:17   作者:小阔爱_data  
这篇文章主要介绍了Python中关于matplotlib图片的灰度处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python中matplotlib图片的灰度处理

环境是ubuntu中的jupyter的环境

图像的灰度化处理的基本原理

将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。

为什么要进行灰度化处理

彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。

而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。

灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。

图像的灰度化处理可用三种方法来实现。

常见的三种方法

  • 先对数据进行基本的处理
#引入包
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
#读取文件
zhima=plt.imread('芝麻.jpg')
plt.imshow(zhima)
#转变需要的类型,并且产生噪声,显示最后的图片
zhima_noisy=zhima.copy().astype(float)
zhima_noisy+=zhima_noisy.std()*0.3*np.random.standard_normal(zhima_noisy.shape)
plt.imshow(zhima_noisy)
#查看形状
zhima.shape
#输出结果为:(662, 1000, 3)
  • 平均值法
#聚合操作后就减少了一个维度了
zhima_mean=zhima.mean(axis=2)
zhima_mean.shape
#输出结果为:(662, 1000)
plt.imshow(zhima_mean,cmap='gray')
  • 最大值法
#最大值法
zhima_max=zhima.max(axis=-1)
zhima_max.shape
plt.imshow(zhima_max,cmap='gray')
  • RGB三原色法
gravity= np.array([0.299,0.587,0.114])
#red*0.299+green*0.587+blue*0.114
#矩阵乘法
zhima_gravity=np.dot(zhima,gravity)
zhima_gravity.shape
plt.imshow(zhima_gravity,cmap='gray')

Matplotlib显示灰度图

matplotlib中的imshow()函数不能自动显示灰度图像,这一点应该是众所周知的,需要调用cmap=“gray"以进行设置,但是cmap="gray"实际上并不是如opencv中的imshow函数一样将单通道图显示为灰度图,私以为是引入了灰度图的灰度量化概念,但并不直接对应灰度,证明见正文。

测试

设置一全1.0的图像(全白),和一全白背景叠加黑色条柱的图像,使用plt.imshow()显示。

代码:

import matplotlib.pyplot as plt
import numpy as np
white=np.ones((100,100),dtype=float)
bar=np.ones((100,100),dtype=float)
bar[40:50,:]=0
plt.figure(1)
plt.subplot(211)
plt.imshow(white,cmap='gray')
plt.title('white map')
plt.subplot(212)
plt.imshow(bar,cmap='gray')
plt.title('black bar')

结果为:

由此可以发现在值全为1.0时,图像显示为黑色,那么是否是dtype的原因呢?测试常用的uint8情况下,亮度为恒定值,显示几何。

代码为:

white1=np.ones((100,100),dtype=np.uint8)*255
white2=np.ones((100,100),dtype=np.uint8)*128
plt.figure((2))
plt.subplot(211)
plt.imshow(white1,cmap='gray')
plt.title('white1')
plt.subplot(212)
plt.imshow(white2,cmap='gray')
plt.title('white2')

结果为:

由此可以确定,这一显示“异常”与数据类型无关 。

解决方案

使用vmin,vmax参数指定灰度范围,或者设定cmap为gray_r以使得灰度范围反转,后者只适用于想显示白色背景。

代码:

white1=np.ones((100,100),dtype=np.uint8)*255
white2=np.ones((100,100),dtype=np.uint8)*128
plt.figure((2))
plt.subplot(211)
plt.imshow(white1,cmap='gray_r')
plt.title('white1')
plt.subplot(212)
plt.imshow(white2,cmap='gray',vmin=0,vmax=255)
plt.title('white2')

结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在Python代码中执行Linux命令的详细用法教程

    在Python代码中执行Linux命令的详细用法教程

    在Python开发过程中,经常需要执行Linux系统命令来完成各种任务,Python提供了多种方式来调用和执行系统命令,本文将详细介绍如何在Python代码中执行Linux命令,并结合实际案例来演示这些方法的使用,需要的朋友可以参考下
    2024-07-07
  • 在centos7中分布式部署pyspider

    在centos7中分布式部署pyspider

    PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
    2017-05-05
  • Python根据服务获取端口号的方法

    Python根据服务获取端口号的方法

    这篇文章主要介绍了Python根据服务获取端口号,文中给大家提到了linux查看端口开启端口的方法,需要的朋友可以参考下
    2019-09-09
  • python读取excel进行遍历/xlrd模块操作

    python读取excel进行遍历/xlrd模块操作

    这篇文章主要介绍了python读取excel进行遍历/xlrd模块操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 教你用Python写一个植物大战僵尸小游戏

    教你用Python写一个植物大战僵尸小游戏

    这篇文章主要介绍了教你用Python写一个植物大战僵尸小游戏,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python中使用asyncio 封装文件读写

    Python中使用asyncio 封装文件读写

    本文主要给大家简单讲解如何用 asyncio.Future 对象来封装文件的异步读写。有需要的小伙伴可以参考下
    2016-09-09
  • Python实现豆瓣图片下载的方法

    Python实现豆瓣图片下载的方法

    这篇文章主要介绍了Python实现豆瓣图片下载的方法,涉及Python针对网页操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • python 如何设置柱状图参数

    python 如何设置柱状图参数

    这篇文章主要介绍了在python中设置柱状图参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 解决Python3用PIL的ImageFont输出中文乱码的问题

    解决Python3用PIL的ImageFont输出中文乱码的问题

    今天小编大家分享一篇解决Python3用PIL的ImageFont输出中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • pygame实现雷电游戏雏形开发

    pygame实现雷电游戏雏形开发

    这篇文章主要为大家详细介绍了pygame实现雷电游戏开发代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论