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 httplib,smtplib使用方法
Sep 06 Python
Python作用域用法实例详解
Mar 15 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python 字典与字符串的互转实例
Jan 13 Python
python运行其他程序的实现方法
Jul 14 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
softmax及python实现过程解析
Sep 30 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
django使用多个数据库的方法实例
Mar 04 Python
python中的装饰器该如何使用
Jun 18 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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
小程序实现留言板
2018/11/02 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
详解python读取和输出到txt
2019/03/29 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python 5个顶级异步框架推荐
2020/09/09 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
新闻专业应届生求职信
2013/10/31 职场文书
团日活动策划书
2014/02/01 职场文书
幼儿评语大全
2014/04/30 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
影视广告专业求职信
2014/09/02 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
老公保证书怎么写
2015/02/26 职场文书