python 用PIL Matplotlib处理图像的基本操作
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。
一、matplotlib
1. 显示图片
1
2
3
4
5
6
7
8
9
10
11
|
import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np lena = mpimg.imread( 'lena.png' ) # 读取和代码处于同一目录下的 lena.png # 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理 lena.shape #(512, 512, 3) plt.imshow(lena) # 显示图片 plt.axis( 'off' ) # 不显示坐标轴 plt.show() |
2. 显示某个通道
1
2
3
4
5
6
7
8
9
10
11
|
# 显示图片的第一个通道 lena_1 = lena[:,:, 0 ] plt.imshow( 'lena_1' ) plt.show() # 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法: plt.imshow( 'lena_1' , cmap = 'Greys_r' ) plt.show() img = plt.imshow( 'lena_1' ) img.set_cmap( 'gray' ) # 'hot' 是热量图 plt.show() |
3. 将 RGB 转为灰度图
matplotlib 中没有合适的函数可以将 RGB 图转换为灰度图,可以根据公式自定义一个:
1
2
3
4
5
6
7
8
|
def rgb2gray(rgb): return np.dot(rgb[...,: 3 ], [ 0.299 , 0.587 , 0.114 ]) gray = rgb2gray(lena) # 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray')) plt.imshow(gray, cmap = 'Greys_r' ) plt.axis( 'off' ) plt.show() |
4. 对图像进行放缩
这里要用到 scipy
1
2
3
4
5
|
from scipy import misc lena_new_sz = misc.imresize(lena, 0.5 ) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸 plt.imshow(lena_new_sz) plt.axis( 'off' ) plt.show() |
5. 保存图像
5.1 保存 matplotlib 画出的图像
该方法适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture。
1
2
3
|
plt.imshow(lena_new_sz) plt.axis( 'off' ) plt.savefig( 'lena_new_sz.png' ) |
5.2 将 array 保存为图像
1
2
|
from scipy import misc misc.imsave( 'lena_new_sz.png' , lena_new_sz) |
5.3 直接保存 array
读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失
1
2
|
np.save( 'lena_new_sz' , lena_new_sz) # 会在保存的名字后面自动加上.npy img = np.load( 'lena_new_sz.npy' ) # 读取前面保存的数组 |
二、PIL
1. 显示图片
1
2
3
|
from PIL import Image im = Image. open ( 'lena.png' ) im.show() |
2. 将 PIL Image 图片转换为 numpy 数组
1
2
|
im_array = np.array(im) # 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝 |
3. 保存 PIL 图片
直接调用 Image 类的 save 方法
1
2
3
|
from PIL import Image I = Image. open ( 'lena.png' ) I.save( 'new_lena.png' ) |
4. 将 numpy 数组转换为 PIL 图片
这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换:
1
2
3
4
5
|
import matplotlib.image as mpimg from PIL import Image lena = mpimg.imread( 'lena.png' ) # 这里读入的数据是 float32 型的,范围是0-1 im = Image.fromarray(np.uinit8(lena * 255 )) im.show() |
5. RGB 转换为灰度图
1
2
3
4
5
|
from PIL import Image I = Image. open ( 'lena.png' ) I.show() L = I.convert( 'L' ) L.show() |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
原文链接:http://www.cnblogs.com/yinxiangnan-charles/p/5928689.html
python 用PIL Matplotlib处理图像的基本操作的更多相关文章
- Python用PIL将PNG图像合成gif时如果背景为透明时图像出现重影的解决办法
最近在用PIL合成PNG图像为GIF时,因为需要透明背景,所以就用putpixel的方法替换背景为透明,但是在合成GIF时,图像出现了重影,在网上查找了GIF的相关资料:GIF相关资料 其中有对GIF ...
- python包matplotlib绘制图像
使用matplotlib绘制图像 import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator impor ...
- Python可视化库-Matplotlib使用总结
在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包 先总结下 ...
- python中利用matplotlib绘图可视化知识归纳
python中利用matplotlib绘图可视化知识归纳: (1)matplotlib图标正常显示中文 import matplotlib.pyplot as plt plt.rcParams['fo ...
- Python之PIL库
Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...
- 使用python中的matplotlib 画图,show后关闭窗口,继续运行命令
使用python中的matplotlib 画图,show后关闭窗口,继续运行命令 在用python中的matplotlib 画图时,show()函数总是要放在最后,且它阻止命令继续往下运行,直到1.0 ...
- Python关于PIL库的学习总结与成果展示
一.关于PIL库的学习总结 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装.安装PIL库的方法如下,需要注意,安装库的名字是pillow. : ...
- PIL包中图像的mode参数
在这里的第一篇. 这篇的是为了说明PIL库中图像的mode参数. 我做的事情是: 在本地找了jpg的图,convert为不同mode,将不同的图截取做了个脑图,有个直观的感觉吧. 把不同mode的图通 ...
- Python 绘图库Matplotlib入门教程
0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...
随机推荐
- 使用html5 FileReader获取图片,并异步上传到server(不使用iframe)
使用html5 FileReader获取图片,并异步上传到server(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax.把图片的base64编 ...
- Vim 复制粘贴探秘
Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情.每当学会了vim的一个新功能,就会很大地提高工作效率.有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim ...
- case when in sql server's stored procedure
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql Evaluates a list of c ...
- PCB Genesis加邮票孔(线与线)实现算法
一.Genesis加邮票孔(线与线)实现算法 1.鼠标点击位置P点, 2.通过P点求出,垂足2个点:P1C与P2C (两个点即距离2条线段垂直的垂足点) 3.计算P1C到P2C方位角(假设置为变量PA ...
- Redis(二)-Win系统下安装
下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择,这里我们下载 Red ...
- 海量数据统计topK
有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M.返回频数最高的100个词. 思路: 把这1G的数据一次性全部读入内存是不可能了,可以每次读一行,然后将该词存到 ...
- (转)vuex2.0 基本使用(2) --- mutation 和 action
我们的项目非常简单,当点击+1按钮的时候,count 加1,点击-1按钮的时候,count 减1. 1, mutation The only way to actually change state ...
- 书不在多,精读则灵 - Oracle入门书籍推荐
作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.com/archives/2006/08/ora ...
- 2星|《10W+走心文案是怎样炼成的》:标题党。实际是台湾创意总监的一些人生感悟和两三个很一般的创意文案
10W+走心文案是怎样炼成的 作者是台湾人,曾在台湾奥美担任创意总监,做过一些广告.本书是他的一些经验介绍. 总体来说是标题党,作者的广告基本是电视广告,跟文案也有关系,估计播放量也很容易过10W+, ...
- 用Python+selenium打开IE浏览器和Chrome浏览器的问题
这几天在学Python+selenium自动化,对三大浏览器Firefox,Chrome和IE都做了尝试,也都分别下载了对应的webdriver,如:geckodriver.chromedriver. ...