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数组复制拷贝的实现方法
Jun 09 Python
简单学习Python time模块
Apr 29 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
tensorflow自定义激活函数实例
Feb 04 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Python读写锁实现实现代码解析
Nov 28 Python
Python中的流程控制详解
Feb 18 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
漂亮但不安全的CTB
2006/10/09 PHP
PHP多进程编程实例详解
2017/07/19 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
详解vue 组件注册
2020/11/20 Vue.js
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python代码区分大小写吗
2020/06/17 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Python urllib3软件包的使用说明
2020/11/18 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
群胜软件Java笔试题
2012/09/29 面试题
英语故事演讲稿
2014/04/29 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
Python学习之包与模块详解
2022/03/19 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python