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实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
Python callable()函数用法实例分析
Mar 17 Python
利用python修改json文件的value方法
Dec 31 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
pandas 对group进行聚合的例子
Dec 27 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
使用Python构造hive insert语句说明
Jun 06 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 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
用户的详细注册和判断
2006/10/09 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
单身旅行者的单身假期:Just You
2018/04/08 全球购物
学生喝酒检讨书
2014/02/06 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
体育课课后反思
2014/04/24 职场文书
妇联主席先进事迹
2014/05/18 职场文书
电子商务专业自荐信
2014/06/02 职场文书
倡议书范文大全
2015/04/28 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书