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脚本暴力破解栅栏密码
Oct 19 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
Python实现通讯录功能
Feb 22 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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做了一个领取优惠券活动的示例代码
2019/07/05 PHP
jquery 插件学习(四)
2012/08/06 Javascript
详解js闭包
2014/09/02 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
Vue实现验证码功能
2019/12/03 Javascript
python django集成cas验证系统
2014/07/14 Python
python正则实现提取电话功能
2018/02/24 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Python操作Excel的学习笔记
2021/02/18 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
主管职责范文
2013/11/09 职场文书
寒假思想汇报
2014/01/10 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
违反交通法规检讨书
2014/09/10 职场文书
民事辩护词范文
2015/05/21 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
《打电话》教学反思
2016/02/22 职场文书
党组织结对共建协议书
2016/03/23 职场文书
检讨书怎么写?
2019/06/21 职场文书