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中操作时间之strptime()方法的使用
Dec 30 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
深入学习Python中的上下文管理器与else块
Aug 27 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
如何用python整理附件
May 13 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
Python经典五人分鱼实例讲解
Jan 04 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 获得汉字拼音首字母的函数
2009/08/01 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
flask框架视图函数用法示例
2018/07/19 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Python学习笔记之装饰器
2020/08/06 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
租赁协议书
2015/01/27 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
html中两种获取标签内的值的方法
2022/06/16 jQuery