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使用saltstack生成服务器资产清单
Mar 01 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
tensorflow识别自己手写数字
Mar 14 Python
对pandas中Series的map函数详解
Jul 25 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
pytorch中的transforms模块实例详解
Dec 31 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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
网络资源
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
js表头排序实现方法
2015/01/16 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
vue组件生命周期详解
2017/11/07 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python opencv读mp4视频的实例
2018/12/07 Python
python实现共轭梯度法
2019/07/03 Python
python中eval与int的区别浅析
2019/08/11 Python
python实现同一局域网下传输图片
2020/03/20 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python中pass语句的作用是什么
2016/06/01 面试题
综合实践活动方案
2014/02/14 职场文书
软件项目开发计划书
2014/05/01 职场文书
横幅标语大全
2014/06/17 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL