python实现读取并显示图片的两种方法


Posted in Python onJanuary 13, 2017

在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。

一、matplotlib

1. 显示图片

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. 显示某个通道

# 显示图片的第一个通道
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 图转换为灰度图,可以根据公式自定义一个:

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

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。

plt.imshow(lena_new_sz)
plt.axis('off')
plt.savefig('lena_new_sz.png')

5.2 将 array 保存为图像

from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)

5.3 直接保存 array

读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失

np.save('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上.npy
img = np.load('lena_new_sz.npy') # 读取前面保存的数组

二、PIL

1. 显示图片

from PIL import Image
im = Image.open('lena.png')
im.show()

2. 将 PIL Image 图片转换为 numpy 数组

im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

3. 保存 PIL 图片

直接调用 Image 类的 save 方法

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,所以要进行转换:

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 转换为灰度图

from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的高级函数map/reduce使用实例
Apr 13 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
Python面向对象编程基础解析(一)
Oct 26 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
python使用suds调用webservice接口的方法
Jan 03 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
python Xpath语法的使用
Nov 26 Python
python中的getter与setter你了解吗
Mar 24 Python
python运算符之与用户交互
Apr 13 Python
Python中的连接符(+、+=)示例详解
Jan 13 #Python
Python中datetime模块参考手册
Jan 13 #Python
python 计算文件的md5值实例
Jan 13 #Python
Python 字典与字符串的互转实例
Jan 13 #Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 #Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 #Python
python递归删除指定目录及其所有内容的方法
Jan 13 #Python
You might like
php的一个登录的类 [推荐]
2007/03/16 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
Python程序慢的重要原因
2020/09/04 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
初入社会应届生求职信
2013/11/18 职场文书
土木工程师岗位职责
2013/11/24 职场文书
和平主题的演讲稿
2014/01/12 职场文书
韩国商务邀请函
2014/01/14 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技