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
相关产品推荐
相关产品推荐

