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之不要红头文件(1)
Sep 28 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
python小白切忌乱用表达式
May 29 Python
python为什么会环境变量设置不成功
Jun 23 Python
python 实现aes256加密
Nov 27 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python实现我的世界小游戏源代码
Mar 02 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python文件处理
2016/02/29 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python实现接口并发测试脚本
2019/06/25 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
超市商业计划书
2014/05/04 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
个人委托书范本汇总
2014/10/01 职场文书
行政前台岗位职责
2015/04/16 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫