这篇文章主要知识点是关于python、plt、多个图、同时显示、对Python中plt的画图函数详解 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书
##plt 同时显示多幅图像 import matplotlib.pyplot as plt plt.figure() plt.subplot(1,2,1) plt.imshow(images[i]) plt.subplot(1,2,2) plt.imshow(maskes[i]) plt.show()
在 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. 对图像进行放缩
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()
1、plt.legend
plt.legend(loc=0)#显示图例的位置,自适应方式
说明: 'best' : 0, (only implemented for axes legends)(自适应方式) 'upper right' : 1, 'upper left' : 2, 'lower left' : 3, 'lower right' : 4, 'right' : 5, 'center left' : 6, 'center right' : 7, 'lower center' : 8, 'upper center' : 9, 'center' : 10,
2、plt.figure
plt.figure(figsize=(14, 6), dpi=80)#设置绘图区域的大小和像素
3、plt.xticks
plt.xticks(new_year)#设置x轴的刻度线为new_year,new_year可以为数组
4、plt.xlabel
plt.xlabel('year')#x轴标签
5、plt.plot
plt.plot(number, color='blue', label="actual value")#将实际值的折线设置为蓝色
6、两个图分开
fig, axes = plt.subplots(2, 1, sharex=True,figsize=(10,10)) axes[0].plot(range (len(data20)),data20,'r') axes[1].plot(range (len(data40)),data40,'b')
7、画竖直线
plt.axvline(99, line, linewidth=4, color='r')#99表示横坐标
8、图片保存
plt.savefig('timeseries_y.jpg')
以上这篇对Python中plt的画图函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。
以上就是本次给大家分享的关于Python的全部知识点内容总结,大家还可以在下方相关文章里找到python里dict变成list的实例方、 Python3结合Dlib实现人脸识别、 python字符串与url编码转换、 等python文章进一步学习,感谢大家的阅读和支持。
展开 +
收起 -
Copyright 2018-2020 xz577.com 码农之家
电子书资源由网友、会员提供上传,本站记录提供者的基本信息及资源来路
鸣谢: “ 码小辫 ” 公众号提供回调API服务、“ 脚本CDN ”提供网站加速(本站寻求更多赞助支持)
版权投诉 / 书籍推广 / 赞助:520161757@qq.com
上传资源(网友、会员均可提供)
解决Python plt.savefig 保存图片时一片空白的问题
更新 这里我会列出对本文的更新。 2017 年 9 月 28 日:修正几处错字,优化排版。 问题 当使用如下代码保存使用 plt.savefig 保存生成的图片时,结果打开生成的图片却是一片空白。 import matplotlib.pyplot as plt""" 一些画图代码 """plt.show()plt.savefig("filename.png") 原因 其实产生这个现象的原因很简单:在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片。 解决 知道了原因,就不难知道解决办法了,解决办法有两种: 在 plt.show() 之前调用 plt.savefig(); import matplotlib.pyplot as plt""" 一些画图代码 """plt.savefig("filename.png")plt.show() 画图的时候获取当前图像(这一点非常类似于 Matlab 的句柄的概念): # gcf: Get Current Figure fig = plt.gcf() plt.show() fig1.savefig('tessstttyyy.png', dpi=100……
对python PLT中的image和skimage处理图片方法详解
用PLT比较轻量级,用opencv是比较重量级 import numpy as npfrom PIL import Imageif __name__ == '__main__': image_file = '/Users/mac/Documents/学习文档/机器学习/5.Package/son.png' height = 100 #假定写入图片的高度是100 img = Image.open(image_file) img_width, img_height = img.size #获取img的尺寸 width = 2 * height * img_width // img_height # 假定字符的高度是宽度的2倍,写入图片的高度是宽度的2倍 img = img.resize((width, height), Image.ANTIALIAS) #改变尺寸,将新定的宽度,高度重定img的size赋给img pixels = np.array(img.convert('L')) #转成灰度值喂给array,pixels是个存灰度值的数组 print(pixels.shape) print(pixels) chars = "MNHQ$OC?7!:-;. " #256色的不同通道浓淡,M代表0-15,N代表16-31 N = len(chars) step = 256 // N print(N) print step result = '' for i in range(height): for j in range(width): result += chars[pixels[i][j] // step] #像素点的值除以step是可以找到step这个像素点的位……
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
在用python画散点图的时候想标记出特定的点,比如在某些点的外围加个空心圆,一样可以通过plt.scatter实现 import matplotlib.pyplot as pltx = [[1, 3], [2, 5]]y = [[4, 7], [6, 3]]for i in range(len(x)): plt.plot(x[i], y[i], color='r') plt.scatter(x[i], y[i], color='b') plt.scatter(x[i], y[i], color='', marker='o', edgecolors='g', s=200) # 把 corlor 设置为空,通过edgecolors来控制颜色 效果图 以上这篇Python matplotlib通过plt.scatter画空心圆标记出特定的点方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……
对Python中plt的画图函数详解
1、plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明:'best' : 0, (only implemented for axes legends)(自适应方式)'upper right' : 1,'upper left' : 2,'lower left' : 3,'lower right' : 4,'right' : 5,'center left' : 6,'center right' : 7,'lower center' : 8,'upper center' : 9,'center' : 10, 2、plt.figure plt.figure(figsize=(14, 6), dpi=80)#设置绘图区域的大小和像素 3、plt.xticks plt.xticks(new_year)#设置x轴的刻度线为new_year,new_year可以为数组 4、plt.xlabel plt.xlabel('year')#x轴标签 5、plt.plot plt.plot(number, color='blue', label="actual value")#将实际值的折线设置为蓝色 6、两个图分开 fig, axes = plt.subplots(2, 1, sharex=True,figsize=(10,10))axes[0].plot(range (len(data20)),data20,'r')axes[1].plot(range (len(data40)),data40,'b') 7、画竖直线 plt.axvline(99, line, linewidth=4, color='r')#99表示横坐标 8、图片保存 plt.savefig('timeseries_y.jpg') 以上这篇对Python中plt的画图函数详解就是……