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的三目运算符和not in运算符使用示例
Mar 03 Python
Python写的一个简单DNS服务器实例
Jun 04 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
Feb 15 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
python psutil监控进程实例
Dec 17 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
python退出循环的方法
Jun 18 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
pytorch简介
Nov 11 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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 工厂模式使用方法
2010/05/18 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
Firefox div高度自适应
2009/04/28 Javascript
javascript定义函数的方法
2010/12/06 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
python矩阵的转置和逆转实例
2018/12/12 Python
如何基于Python批量下载音乐
2019/11/11 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
学python爬虫能做什么
2020/07/29 Python
Python利用命名空间解析XML文档
2020/08/10 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
《走一步再走一步》教学反思
2014/02/15 职场文书
学生安全责任书模板
2014/07/25 职场文书