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简明入门教程
Aug 04 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
python使用itchat实现手机控制电脑
Feb 22 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
python列表list保留顺序去重的实例
Dec 14 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
python贪吃蛇游戏代码
Apr 18 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 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学习 函数 课件
2008/06/15 PHP
php 进度条实现代码
2009/03/10 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
JS实现的找零张数最小问题示例
2017/11/28 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python温度转换实例分析
2018/01/17 Python
python利用微信公众号实现报警功能
2018/06/10 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
基于python实现高速视频传输程序
2019/05/05 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Django缓存Cache使用详解
2020/11/30 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
什么是java序列化,如何实现java序列化
2012/11/14 面试题
如何撰写一封出色的求职信
2014/04/27 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
老人院义工活动感想
2015/08/07 职场文书
学生病假条范文
2015/08/17 职场文书
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏