IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> matplotlib画3D人体关键点 -> 正文阅读

[Python知识库]matplotlib画3D人体关键点

作者:language-python

做3D pose的同学经常需要可视化单帧的3D关键点结果来进行调试。

本文实验目的,用matplotlib把一组点画成3D火柴人。注意:我画的都是17关节点的,其他数量的关节点请对照着改。

?

??

输入

[[9.07790224, -72.22343977, -76.2384473, -14.76985357, 93.36553108,
  37.00967529, 50.77555181, 23.629042, -8.17606904, -55.17824984,
  -20.64523825, 128.93648202, 161.99088735, 137.73662061, -105.13621915,
  -173.42035763, -139.20512344], # axis-x
 [17.67119202, 117.5121073, 80.80944741, 151.41362938, -82.1697299,
  -108.63658419, -62.51112022, 25.61594197, -0.93282285, -57.61404975,
  -33.30759321, -92.44999831, -192.53606268, -213.71209574, 110.08766607,
  213.40229899, 135.20572051], # axis-y
 [-30.39547729, 26.18883494, -502.97420581, -927.51450811, 24.75648722,
  -501.73217965, -929.53198007, 196.18478224, 435.39843872, 489.66153962,
  610.95493383, 412.93642629, 224.81752081, 97.52059155, 415.66381442,
  258.698571, 97.77770797 # axis-z
]]

?输出

代码:

# author: muzhan
import matplotlib
import numpy as np

matplotlib.use('Agg')
import matplotlib.pyplot as plt

ap1 = [[9.07790224, -72.22343977, -76.2384473, -14.76985357, 93.36553108,
        37.00967529, 50.77555181, 23.629042, -8.17606904, -55.17824984,
        -20.64523825, 128.93648202, 161.99088735, 137.73662061, -105.13621915,
        -173.42035763, -139.20512344],
       [17.67119202, 117.5121073, 80.80944741, 151.41362938, -82.1697299,
        -108.63658419, -62.51112022, 25.61594197, -0.93282285, -57.61404975,
        -33.30759321, -92.44999831, -192.53606268, -213.71209574, 110.08766607,
        213.40229899, 135.20572051],
       [-30.39547729, 26.18883494, -502.97420581, -927.51450811, 24.75648722,
        -501.73217965, -929.53198007, 196.18478224, 435.39843872, 489.66153962,
        610.95493383, 412.93642629, 224.81752081, 97.52059155, 415.66381442,
        258.698571, 97.77770797]]

ap = np.array(ap1, dtype='float32').T / 1000.0
np_data = ap
xp = np_data.T[0].T
yp = np_data.T[1].T
zp = np_data.T[2].T  + 0.5

ax = plt.axes(projection='3d')

radius = 1.7
ax.set_xlim3d([-radius / 2, radius / 2])
ax.set_zlim3d([0, radius])
ax.set_ylim3d([-radius / 2, radius / 2])
ax.view_init(elev=15., azim=70)
ax.dist = 7.5

# 3D scatter
ax.scatter3D(xp, yp, zp, cmap='Greens')

# left leg, node [0, 1, 2, 3]
ax.plot(xp[0:4], yp[0:4], zp[0:4], ls='-', color='red')

# right leg
ax.plot(np.hstack((xp[0], xp[4:7])),
        np.hstack((yp[0], yp[4:7])),
        np.hstack((zp[0], zp[4:7])),
        ls='-', color='blue')

# spine, node [0, 7, 8, 9, 10]
ax.plot(np.hstack((xp[0], xp[7:11])),
        np.hstack((yp[0], yp[7:11])),
        np.hstack((zp[0], zp[7:11])),
        ls='-', color='gray')

# right arm, node [8, 11, 12, 13]
ax.plot(np.hstack((xp[8], xp[11:14])),
        np.hstack((yp[8], yp[11:14])),
        np.hstack((zp[8], zp[11:14])),
        ls='-', color='blue')

# left arm, node [8, 14, 15, 16]
ax.plot(np.hstack((xp[8], xp[14:])),
        np.hstack((yp[8], yp[14:])),
        np.hstack((zp[8], zp[14:])),
        ls='-', color='red')
plt.savefig('skeleton.jpg')

上面那段代码就够画出骨架了~

下面介绍另一种形式的输出关节点:

3D关节点通常有过一定的线性变换,所以有时候画出来图案比较奇怪,可能是需要调节scale以及平移。比如下面这个栗子,稍微需要做个转置以及往下平移:

import matplotlib
import numpy as np

matplotlib.use('Agg')
import matplotlib.pyplot as plt

ap0 = [[-0.00001, -0.00002, 1.00830],
       [0.14475, -0.07537, 0.99674],
       [0.13747, -0.10477, 0.51222],
       [0.05090, -0.27371, 0.07246],
       [-0.14476, 0.07535, 1.01964],
       [-0.19476, -0.03135, 0.54859],
       [-0.33582, -0.27418, 0.14530],
       [0.03465, 0.07187, 1.27154],
       [0.08203, 0.09819, 1.55611],
       [0.13682, 0.16097, 1.71822],
       [0.09326, 0.02394, 1.77841],
       [-0.10811, 0.13847, 1.54135],
       [-0.40501, 0.27080, 1.54436],
       [-0.48869, 0.47729, 1.79511],
       [0.21069, -0.01737, 1.48483],
       [0.39367, -0.21920, 1.31686],
       [0.63089, -0.16669, 1.51139]]

ap = np.array(ap0, dtype='float32')
np_data = ap
xp = np_data.T[0].T
yp = np_data.T[1].T
zp = np_data.T[2].T

ax = plt.axes(projection='3d')

radius = 1.7
ax.set_xlim3d([-radius / 2, radius / 2])
ax.set_zlim3d([0, radius])
ax.set_ylim3d([-radius / 2, radius / 2])
ax.view_init(elev=15., azim=70)
ax.dist = 7.5

# 3D scatter
ax.scatter3D(xp, yp, zp, cmap='Greens')

# left leg, node [0, 1, 2, 3]
ax.plot(xp[0:4], yp[0:4], zp[0:4], ls='-', color='red')

# right leg
ax.plot(np.hstack((xp[0], xp[4:7])),
        np.hstack((yp[0], yp[4:7])),
        np.hstack((zp[0], zp[4:7])),
        ls='-', color='blue')

# spine, node [0, 7, 8, 9, 10]
ax.plot(np.hstack((xp[0], xp[7:11])),
        np.hstack((yp[0], yp[7:11])),
        np.hstack((zp[0], zp[7:11])),
        ls='-', color='gray')

# right arm, node [8, 11, 12, 13]
ax.plot(np.hstack((xp[8], xp[11:14])),
        np.hstack((yp[8], yp[11:14])),
        np.hstack((zp[8], zp[11:14])),
        ls='-', color='blue')

# left arm, node [8, 14, 15, 16]
ax.plot(np.hstack((xp[8], xp[14:])),
        np.hstack((yp[8], yp[14:])),
        np.hstack((zp[8], zp[14:])),
        ls='-', color='red')
plt.savefig('skeleton.jpg')

输出为:

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 21:58:41  更:2021-07-16 21:58:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:13:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计