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中的对象,方法,类,实例,函数用法分析
Jan 15 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
对Python中内置异常层次结构详解
Oct 18 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
解决Django生产环境无法加载静态文件问题的解决
Apr 23 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python超时重新请求解决方案
Oct 21 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
Python 多线程共享变量的实现示例
Apr 17 Python
Python图像处理之图像拼接
Apr 28 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安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
python SOCKET编程基础入门
2021/02/27 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
什么是Rollback Segment
2013/04/22 面试题
小学五年级语文上册教学计划
2015/01/22 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android
Redis实现一个账号只能登录一个设备
2022/04/19 Redis