import cv2 import mediapipe as mp import math

初始化MediaPipe的人体姿势模型

mp_drawing = mp.solutions.drawing_utils mp_pose = mp.solutions.pose

打开输入视频文件

cap = cv2.VideoCapture('1.mp4')

获取输入视频的帧率和分辨率

fps = int(cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

创建输出视频文件

fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('2.mp4', fourcc, fps, (width, height))

处理视频文件中的每一帧

with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose: while cap.isOpened(): # 读取一帧 ret, frame = cap.read() if not ret: break

    # 将帧转换为RGB格式
    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # 处理人体姿势检测
    results = pose.process(image)

    # 绘制人体骨架
    mp_drawing.draw_landmarks(
        frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    # 计算右腿与右手的角度
    if results.pose_landmarks:
        right_knee = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_KNEE]
        right_ankle = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_ANKLE]
        right_wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_WRIST]

        angle = math.degrees(math.atan2(right_wrist.y - right_ankle.y, right_wrist.x - right_ankle.x) - 
                             math.atan2(right_knee.y - right_ankle.y, right_knee.x - right_ankle.x))

        # 在输出图片上显示角度值
        cv2.putText(frame, 'Angle: {:.2f}'.format(angle), (50, 50), 
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

    # 将帧写入输出视频文件
    out.write(frame)

    # 显示当前帧的结果
    cv2.imshow('MediaPipe Pose Detection', frame)
    cv2.imshow('MediaPipe Pose Estimation', frame)
    # 按下q键退出

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

释放资源

cap.release() out.release() cv2.destroyAllWindows()


原文地址: https://www.cveoy.top/t/topic/j9sf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录