python如何实现读取并显示图片(不需要图形界面)


Posted in Python onJuly 08, 2020

在 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 读取并显示图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python入门之modf()方法的使用
May 15 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Python占用的内存优化教程
Jul 28 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
如何使用Cython对python代码进行加密
Jul 08 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
python中yield的用法详解
Jan 13 Python
基于python实现可视化生成二维码工具
Jul 08 #Python
如何使用Cython对python代码进行加密
Jul 08 #Python
python中的错误如何查看
Jul 08 #Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 #Python
利用keras使用神经网络预测销量操作
Jul 07 #Python
Python Mock模块原理及使用方法详解
Jul 07 #Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 #Python
You might like
操作Oracle的php类
2006/10/09 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
教导处工作制度
2014/01/18 职场文书
年级组长自我鉴定
2014/02/22 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
交通工程专业推荐信
2014/09/06 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python