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通过ssh-powershell监控windows的方法
Jun 02 Python
json跨域调用python的方法详解
Jan 11 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
python批量修改文件编码格式的方法
May 31 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
python 进程的几种创建方式详解
Aug 29 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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无限极分类函数的实现方法详解
2017/04/15 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
Python中的类学习笔记
2014/09/23 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
妈妈的账单教学反思
2014/02/06 职场文书
大学活动总结范文
2014/04/29 职场文书
一份文言文检讨书
2014/09/13 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL