使用 OpenPose 分析 MP4 视频中的人体骨架并输出结果到另一个 MP4 视频
以下是基于 OpenPose 分析 MP4 视频中的人体骨架并将结果输出到另一个 MP4 视频的 Python 程序:
import cv2
import time
import argparse
# 导入 openpose 模块
from openpose import pyopenpose as op
# 定义参数
parser = argparse.ArgumentParser()
parser.add_argument("--input_video", default='1.mp4', help='输入视频文件名')
parser.add_argument("--output_video", default='2.mp4', help='输出视频文件名')
args = parser.parse_known_args()[0]
# 初始化 openpose
params = dict()
params['model_folder'] = 'models/'
params['model_pose'] = 'BODY_25'
params['display'] = 0
opWrapper = op.WrapperPython()
opWrapper.configure(params)
opWrapper.start()
# 打开输入视频
cap = cv2.VideoCapture(args.input_video)
# 获取输入视频的帧率、宽度和高度
fps = 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(args.output_video, fourcc, fps, (width, height))
# 处理每一帧
while True:
# 读取一帧
ret, frame = cap.read()
if not ret:
break
# 转换为 RGB 格式
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 运行 openpose
datum = op.Datum()
datum.cvInputData = frame
opWrapper.emplaceAndPop([datum])
# 绘制骨架
frame = cv2.cvtColor(datum.cvOutputData, cv2.COLOR_BGR2RGB)
# 写入输出视频
out.write(frame)
# 显示结果
cv2.imshow('Openpose', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
该程序读取名为 '1.mp4' 的输入视频,并使用 OpenPose 分析每一帧的人体骨架。然后,它将结果绘制到每一帧并将其写入名为 '2.mp4' 的输出视频。程序还显示了每一帧的结果。按 'q' 键退出程序。
原文地址: https://www.cveoy.top/t/topic/j9ZY 著作权归作者所有。请勿转载和采集!