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 相关文章推荐
20招让你的Python飞起来!
Sep 27 Python
Python机器学习logistic回归代码解析
Jan 17 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python 移动光标位置的方法
Jan 20 Python
利用Python校准本地时间的方法教程
Oct 31 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
python实现图片横向和纵向拼接
Mar 05 Python
如何用用Python将地址标记在地图上
Feb 07 Python
一篇文章带你搞懂Python类的相关知识
May 20 Python
图文详解matlab原始处理图像几何变换
Jul 09 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
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
租房协议书
2014/09/12 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android