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标准库之sqlite3使用实例
Nov 25 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
Python 单例设计模式用法实例分析
Sep 23 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
使用Python pip怎么升级pip
Aug 11 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
pytorch训练神经网络爆内存的解决方案
May 22 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
PHP 中的一些经验积累
2006/10/09 PHP
通过html表格发电子邮件
2006/10/09 PHP
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
php DES加密算法实例分析
2019/09/18 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
python threading模块操作多线程介绍
2015/04/08 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
python的常用模块之collections模块详解
2018/12/06 Python
django的csrf实现过程详解
2019/07/26 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
工程造价管理专业大专生求职信
2013/10/06 职场文书
支部组织生活会方案
2014/06/10 职场文书
优秀教师个人材料
2014/12/15 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
政工师工作总结2015
2015/05/26 职场文书
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers