Matplotlib学习---可视化人体姿态

1.简介

Matplotlib是一个Python 2D绘图库,可生成图表、直方图、散点图、谱图、条形图等。pyplot提供了类似MALAB的界面,它提供了matplotlib的“状态机器环境”,位于层次结构顶部,其中的一些简单的函数便可绘图。pyplot的下一个层次是面向对象接口(?)。

1)图 figure

fig = plt.figure() # 最简单的方式创建一个图
fig.suptitle('No axes on this figure') # Add a title so we know which it is
fig, ax_lst = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes

2)轴 Axes

一个图可以包含多个轴,但一个给定的轴对象只能在一个图中。轴对象可以包含两个或三个坐标轴,负责数据限制,x坐标和y坐标。
Axes 类及其成员函数是使用OO接口的主要入口点。

3)坐标轴 Axis

负责设置图形限制并生成刻度(轴上的标记)和 ticklabel (标记刻度的字符串)。

4)艺术家 Artist

图形中看到的每一个元素都是艺术家,例如:figure、Axes、Axis等。
输入在绘图之前,最好讲输入转换为np.array对象。
Matplotlib,pyplot和pylab之间的关系?
Matplotlib 是整个包,而 Matplotlib.pyplot 是 Matplotlib 的一个模块。
对于 pyplot 模块中的函数,总是有一个“当前”图形和轴(根据请求自动创建)。
pylab已被丢弃。

编码风格

pyplot风格
import maplotlib.pyplot as plt
import numpy as np
然后调用np.arange, np.zeros, np.pi, plt.figure, plt.plot, plt.show等函数。
使用 pyplot 接口创建图形,然后使用 object 方法创建其余的图形。
交互模式
TO-DO

Pyplot 常用API----Updating

matplotlib.pyplot是一系列让matplotlib像MATLAB那样工作的的函数集合。
matplotlib.pyplot.plot(x,y,format_string,**kwargs)----折线图
注:相邻点之间线段相连,不相邻的不连
format_string有颜色字符,风格字符和标记字符



matplotlib.pyplot.figure( num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True )
num:图像编号或名称,数字为编号 ,字符串为名称
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
facecolor:背景颜色
edgecolor:边框颜色
frameon:是否显示边框
matplotlib.pyplot.subplot(nrows,ncols,sharex,sharey,subplot_kw,**fig_kw)
注意:subplot可以规划figure划分为n个子图,但每条subplot命令只会创建一个子图 。
plt.axis('off') # 不显示坐标尺寸

一般步骤:

1.建立一个画布
plt.figure
2.建立子图
plt.subplot()/plt.plot()
3.显示
plt.show()

可视化二维人体姿态

import matplotlib.pyplot as plt
import matplotlib.mplot3d import Axes3D
import numpy as np
是对(32,2)这样维度的2d pose进行可视化
1.判断是否是正确的维度
assert channel == len(H36_NAMES)*2 # 这是可以根据不同情况进行变化的,比如(17,3)
2.根据如下的人体骨骼图的连接定义两个列表

I = np.array([1,2,3,1,7,8,1, 13,14,15,14,18,19,14,26,27])-1 # start points
J = np.array([2,3,4,7,8,9,13,14,15,16,18,19,20,26,27,28])-1 # end points
LR = np.array([1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1])
3.建立连接矩阵
for i in np.arange(len(I)):
x, y = [np.array( [vals[I[i], j], vals[J[i], j]] ) for j in range(2)]
ax.plot(x, y, lw=2, c='#e74c3c' if LR[i] else c='#3498db') # 左右两边的骨骼以不同的颜色展示
4.设置坐标轴的上下限
root_x, root_y = vals[0,0], vals[0,1]
Radius = 350
ax.set_xlim([-Radius+root_x, Radius+root_x])
ax.set_ylim([-Radius+root_y, Radius+root_y])
Optional
5.设置无坐标轴刻度
ax.set_xticks([])
ax.set_yticks([])
6.去除坐标轴刻度标签
ax.get_xaxis().set_xticklabels([])
ax.get_yaxis().set_yticklabels([])
ax.set_aspect('equal') # x轴和y轴的比例是1:1
注:这样显示出来的2d pose是倒立的,需要加上下面这行代码进行翻转:
ax.invert_yaxis()

可视化三维人体姿态

import matplotlib.pyplot as plt
import matplotlib.mplot3d import Axes3D
import numpy as np
是对(32,3)这样维度的3d pose进行可视化
1.判断是否是正确的维度
assert channel == len(H36_NAMES)*3 # 这是可以根据不同情况进行变化的,比如(17,3)
2.根据上面的人体骨骼图的连接定义两个列表
I = np.array([1,2,3,1,7,8,1, 13,14,15,14,18,19,14,26,27])-1 # start points
J = np.array([2,3,4,7,8,9,13,14,15,16,18,19,20,26,27,28])-1 # end points
LR = np.array([1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1])
3.建立连接矩阵
for i in np.arange(len(I)):
x, y, z = [np.array( [vals[I[i], j], vals[J[i], j]] ) for j in range(3)]
ax.plot(x, y, z,lw=2, c='#e74c3c' if LR[i] else c='#3498db') # 左右两边的骨骼以不同的颜色展示
4.设置坐标轴的上下限
root_x, root_y, root_z= vals[0,0], vals[0,1], vals[0,2]
Radius = 750
ax.set_xlim3d([-Radius+root_x, Radius+root_x])
ax.set_ylim3d([-Radius+root_y, Radius+root_y])
ax.set_ylim3d([-Radius+root_z, Radius+root_z])
5.设置无坐标轴刻度
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
6.去除坐标轴刻度的标签
ax.get_xaxis.set_xticklabels([])
ax.get_yaxis.set_yticklabels([])
ax.get_zaxis.set_zticklabels([])
7.去除背景板的颜色
white = (1.0, 1.0, 1.0, 0.0)
ax.w_xaxis.set_pane_color(white)
ax.w_yaxis.set_pane_color(white)
8.去除线条的颜色
ax.w_xaxis.line.set_color(white)
ax.w_yaxis.line.set_color(white)
ax.w_zaxis.line.set_color(white)
最后,要显示出来一定要plt.show()!!!!

猜你喜欢

转载自www.cnblogs.com/coollin/p/12349906.html
今日推荐