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运行的17个时新手常见错误小结
Aug 07 Python
使用python检测手机QQ在线状态的脚本代码
Feb 10 Python
ptyhon实现sitemap生成示例
Mar 30 Python
Python使用Scrapy爬取妹子图
May 28 Python
Python 装饰器使用详解
Jul 29 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Django rest framework工具包简单用法示例
Jul 20 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
基于python二叉树的构造和打印例子
Aug 09 Python
python numpy库np.percentile用法说明
Jun 08 Python
python单例模式的应用场景实例讲解
Feb 24 Python
对PyTorch中inplace字段的全面理解
May 22 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
收音机指标测试方法及仪器
2021/03/01 无线电
基于mysql的bbs设计(五)
2006/10/09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
关于js datetime的那点事
2011/11/15 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
python在命令行下使用google翻译(带语音)
2014/01/16 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
django 读取图片到页面实例
2020/03/27 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
监理资料员岗位职责
2014/01/03 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
安全教育第一课观后感
2015/06/17 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
python 中的jieba分词库
2021/11/23 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android