欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【ROS】mp4转rosbag

【ROS】mp4转rosbag

2025/4/19 3:46:46 来源:https://blog.csdn.net/ControlLearner/article/details/139443364  浏览:    关键词:【ROS】mp4转rosbag

前言

工作中遇到域控中无中间件,无法采用rosbag等中间件的形式同时采集感知结果与视频流,只能通过外接摄像头采集视频流,以及使用can报文或者bin文件形式存储路测数据;导致本地回放时,无法通过视频流观察真实情况,来判断优化方向。于是,另辟蹊径,将工程代码转成ros方式以及将视频流转成rosbag,可同时使用rviz分析算法与image定位问题;

注意事项

1.需要使用python2

代码

import time, sys, os
from ros import rosbag
import roslib, rospy
roslib.load_manifest('sensor_msgs')
from sensor_msgs.msg import Image
import argparse
from cv_bridge import CvBridge
import cv2TOPIC = "/image_viz" # 对应topic_name
def CreateVideoBag(videopath, bagname):'''Creates a bag file with a video file'''print("raw mp4 name:",videopath)print("output bag name:",bagname)bag = rosbag.Bag(bagname, 'w')cap = cv2.VideoCapture(videopath)cb = CvBridge()prop_fps = cap.get(cv2.CAP_PROP_FPS)  if prop_fps != prop_fps or prop_fps <= 1e-2:print("Warning: can't get FPS. Assuming 24.")prop_fps = 24prop_fps = 24 # print("set fps:",prop_fps)ret = Trueframe_id = 0while(ret):ret, frame = cap.read()if not ret:breakstamp = rospy.rostime.Time.from_sec(float(frame_id) / prop_fps)frame_id += 1image = cb.cv2_to_imgmsg(frame, encoding='bgr8')image.header.stamp = stampimage.header.frame_id = "base_link"bag.write(TOPIC, image, stamp)cap.release()bag.close()if __name__ == "__main__":# parser = argparse.ArgumentParser()# parser.add_argument("--topic", type=str, default="/image_viz")# args = parser.parse_args()if len( sys.argv ) == 3:CreateVideoBag(*sys.argv[1:])else:print( "Usage: video2bag videofilename bagfilename")

步骤

python2 mp4_to_bag.py <video_name>.mp4 <output_bag_name>.bag # 执行转化命令
rosbag play -l <output_bag_name>.bag camera/image_raw:=image_raw0 # 循环播放图片,并重命名成自己需要的话题名

结果

在这里插入图片描述
PS:请注意视频流与算法处理存在些许的时间差。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词