You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaPipe Pose 3D绘图仅显示腿部关键点问题求助

解决MediaPipe Pose 3D散点图仅显示腿部关键点的问题

问题出在mp_drawing.plot_landmarks默认会渲染所有关键点,哪怕你指定了自定义连接——自定义连接只控制线条是否绘制,不影响关键点的显示。要实现只显示腿部关键点,你需要自定义每个关键点的绘制样式,把非腿部的关键点设置为不可见。

步骤1:明确腿部关键点索引

MediaPipe Pose的腿部相关关键点索引如下(对应33点模型):

  • 左髋: 23
  • 右髋: 24
  • 左膝: 25
  • 右膝: 26
  • 左踝: 27
  • 右踝: 28
  • 左足跟: 29
  • 右足跟: 30
  • 左脚趾: 31
  • 右脚趾: 32

步骤2:创建自定义关键点绘制样式

创建一个DrawingSpec列表,仅让腿部关键点可见,其余设为透明(不可见):

# 定义腿部关键点索引列表
LEG_LANDMARKS = [23,24,25,26,27,28,29,30,31,32]

# 创建自定义样式:非腿部关键点隐藏,腿部关键点高亮
custom_landmark_style = [
    mp_drawing.DrawingSpec(visibility=0)  # 默认隐藏所有点
    for _ in range(33)  # 对应33个关键点
]
# 为腿部关键点设置可见的样式
for idx in LEG_LANDMARKS:
    custom_landmark_style[idx] = mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=5, circle_radius=5)

步骤3:修改3D绘图调用

在调用plot_landmarks时,同时传入自定义连接和自定义关键点样式:

mp_drawing.plot_landmarks(
    results.pose_world_landmarks,
    connections=custom_connections,
    landmark_drawing_spec=custom_landmark_style  # 传入自定义关键点样式
)

完整修改后的代码示例

把上述逻辑整合到你的代码中:

IMAGE_FilES=[r"C:\Users\SL-2577\Downloads\b4e1faaf9733adbebf21c568d6b6058d.jpg"]
BG_COLOR = (192, 192, 192) 
with mp_pose.Pose(
    static_image_mode=True,
    model_complexity=2,
    enable_segmentation=True,
    min_detection_confidence=0.5) as pose:
    for idx, file in enumerate(IMAGE_FilES):
        image = cv2.imread(file)
        image_height, image_width, _ = image.shape
        results = pose.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
        annotated_image = image.copy()
        annotated_image1 = image.copy()

        mp_drawing.draw_landmarks(
            annotated_image,
            results.pose_landmarks,
            connections = custom_connections,
            landmark_drawing_spec=custom_style)

        cv2.imshow('landmarks', annotated_image)
        cv2.waitKey(0)

# 定义腿部关键点索引
LEG_LANDMARKS = [23,24,25,26,27,28,29,30,31,32]
# 创建自定义3D关键点样式
custom_3d_landmark_style = [
    mp_drawing.DrawingSpec(visibility=0) for _ in range(33)
]
for idx in LEG_LANDMARKS:
    custom_3d_landmark_style[idx] = mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=5, circle_radius=5)

# 绘制仅显示腿部的3D散点图
mp_drawing.plot_landmarks(
    results.pose_world_landmarks,
    connections=custom_connections,
    landmark_drawing_spec=custom_3d_landmark_style
)

这样就能让3D散点图只显示腿部的关键点和对应的连接了。

内容的提问来源于stack exchange,提问作者user19381782

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:05:13