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的lambda匿名函数的简单介绍
Apr 25 Python
Python定时执行之Timer用法示例
May 27 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
python list转置和前后反转的例子
Aug 26 Python
Python request操作步骤及代码实例
Apr 13 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python从PDF中提取数据的示例
Oct 30 Python
python性能测试工具locust的使用
Dec 28 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 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/07/10 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
详解python中init方法和随机数方法
2019/03/13 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
用 python 进行微信好友信息分析
2020/11/28 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
2015年公司中秋节致辞
2015/07/31 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
Redis实现短信验证码登录的示例代码
2022/06/14 Redis
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers