Python matplotlib 和PIL
前言
目录
文章目录
- 前言
- 目录
- 正文
- 一、matplotlib
- 二、PIL
正文
##plt 同时显示多幅图像import matplotlib.pyplot as pltplt.figure()plt.subplot(1,2,1)plt.imshow(images[i])plt.subplot(1,2,2)plt.imshow(maskes[i])plt.show()
以下转自:https://www.cnblogs.com/yinxiangnan-charles/p/5928689.html
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。
一、matplotlib
- 显示图片
import matplotlib.pyplot as plt # plt 用于显示图片import matplotlib.image as mpimg # mpimg 用于读取图片import numpy as nplena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理lena.shape #(512, 512, 3)plt.imshow(lena) # 显示图片plt.axis('off') # 不显示坐标轴plt.show()
- 显示某个通道
# 显示图片的第一个通道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()
- 将 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()
- 对图像进行放缩
这里要用到 scipy
from scipy import misclena_new_sz = misc.imresize(lena, 0.5) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸plt.imshow(lena_new_sz)plt.axis('off')plt.show()
- 保存图像
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 miscmisc.imsave('lena_new_sz.png', lena_new_sz)
5.3 直接保存 array
读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失
np.save('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上.npyimg = np.load('lena_new_sz.npy') # 读取前面保存的数组
二、PIL
1. 显示图片from PIL import Imageim = Image.open('lena.png')im.show()
- 将 PIL Image 图片转换为 numpy 数组
im_array = np.array(im)# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝
- 保存 PIL 图片
直接调用 Image 类的 save 方法
from PIL import ImageI = Image.open('lena.png')I.save('new_lena.png')
- 将 numpy 数组转换为 PIL 图片
这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换:
import matplotlib.image as mpimgfrom PIL import Imagelena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1im = Image.fromarray(np.uinit8(lena*255))im.show()
- RGB 转换为灰度图
from PIL import ImageI = Image.open('lena.png')I.show()L = I.convert('L')L.show()
Python matplotlib 和PIL相关推荐
- 使用游戏角色娜可露露讲述Python图像处理的方法(matplotlib、PIL和OpenCV)
Python中除了使用OpenCV以外,使用matplotlib和PIL这两个模块,也可以对图像进行处理. 一.matplotlib 1. 显示图片 import matplotlib.pyplo ...
- python如何将图片的像素矩阵绘制成图片(python,matplotlib):TypeError: Invalid shape (1, 28, 28) for image data
矩阵变成图片,这个问题使用(python , matplotlib ) 可以轻松实现. import matplotlib.pyplot as plt #使用格式 plt.imshow(x)#其中x为 ...
- python matplotlib 显示图像
python matplotlib 显示图像 首先需要import import os from PIL import Image import matplotlib.pyplot as plt 显示 ...
- Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)
Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部) 目录
- Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)、水平条形图(horizontal bar)
Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等).水平条形图(horizontal bar) 目录
- Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式).使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等) 目 ...
- Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签.用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部) ...
- python matplotlib 简单用法
python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...
- 老咸鱼今天告诉你用Python matplotlib 各种图绘制流线图,难怪老板放纵他
复习回顾 在Python关于绘图,Mlab提供开源的matplotlib模块,不仅可以绘制折线图.柱状图.散点图等常规图外,还支持绘制量场图.频谱图.提琴图.箱型图等特殊图,例举往期文章可前往查看详情 ...
最新文章
- Linux命令行–更多bash shell命令(转)
- STM32F4读写内部FLASH【使用库函数】
- 从传统操作系统角度理解Hadoop YARN
- UTF-8, Unicode, GB2312格式串转换之C语言版
- 学习jQuery formValidator
- 3种设计模式的java小程序,java实现的设计模式小程序 模拟Web系统
- LeetCode每周刷题(2019.7.1-2019.7.7)
- 校准 Linux 服务器的时间
- HiJson软件改进之路(json格式化工具)
- XP系统时间同步和开启WindowsTime服务
- python为什么是蛇的天敌_青蛙和蛇一直是天敌,只知道蛇会吃青蛙,你知不知道青蛙也吃蛇...
- 【iOS】file not found: .../Build/Products/Debug-iphonesimulator file not found
- R语言报错:Error in data[[rowvar]] : attempt to select less than one element in get1index
- linux给红米note4x刷机,小米红米Note 4X线刷刷机教程_Note4X第三方rom系统刷机包
- 中国人为什么这么爱面子?
- 三维空间中的旋转--旋转向量
- 申请国家发明专利费用是多少?
- codeblocks关闭logsothers
- ArcMap进行专题地图编制
- iOS Safari阅读模式研究