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实现一个简单的能够上传下载的HTTP服务器
May 05 Python
在windows系统中实现python3安装lxml
Mar 23 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
Python中修改字符串的四种方法
Nov 02 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
python之yield和Generator深入解析
Sep 18 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
python实现最短路径的实例方法
Jul 19 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
基于Python实现的购物商城管理系统
Apr 27 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 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
利用PHP实现短域名互转
2013/07/05 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
vue生命周期的探索
2019/04/03 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
python strip()函数 介绍
2013/05/24 Python
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
学生会竞选演讲稿
2014/04/24 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
redis缓存存储Session原理机制
2021/11/20 Redis
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
图神经网络GNN算法
2022/05/11 Python