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中dict与set的使用
Aug 10 Python
win与linux系统中python requests 安装
Dec 04 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
pandas object格式转float64格式的方法
Apr 10 Python
python对视频画框标记后保存的方法
Dec 07 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Python 动态变量名定义与调用方法
Feb 09 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python Unittest原理及基本使用方法
Nov 06 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过程中的一些注意点的总结
2013/10/25 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
js格式化时间小结
2014/11/03 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
Three.js基础学习教程
2017/11/16 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
分享6个隐藏的python功能
2017/12/07 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
Linux文件系统类型
2012/02/15 面试题
英文简历自荐信范文
2013/12/11 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
政治思想表现评语
2014/05/04 职场文书
优秀纪检干部材料
2014/08/27 职场文书
敬老月活动总结
2014/08/28 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL