gpt4 book ai didi

image - 如何将视频或图像序列转换为包文件?

转载 作者:行者123 更新时间:2023-12-04 19:03:16 27 4
gpt4 key购买 nike

我是 ROS 的新手。我需要转换一个预先存在的视频文件,或者一个 可以连接到视频流中的图像数量 .bag ROS 中的文件。我在网上找到了这个代码:http://answers.ros.org/question/11537/creating-a-bag-file-out-of-a-image-sequence/ ,但它说它用于相机校准,所以不确定它是否符合我的目的。

熟悉 ROS 的人能否确认我可以使用为我的目的提供的链接中的代码,或者如果有人确实拥有我正在寻找的代码,您能否将其张贴在这里?

最佳答案

以下代码将视频文件转换为包文件,其灵感来自所提供链接中的代码。
小提醒:

  • 此代码取决于 cv2 (opencv python)
  • ROS 消息的时间戳由帧索引和 fps 计算。如果 opencv 无法从视频中读取它,fps 将设置为 24。
  • import time, sys, os
    from ros import rosbag
    import roslib, rospy
    roslib.load_manifest('sensor_msgs')
    from sensor_msgs.msg import Image

    from cv_bridge import CvBridge
    import cv2

    TOPIC = 'camera/image_raw/compressed'

    def CreateVideoBag(videopath, bagname):
    '''Creates a bag file with a video file'''
    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 = 24
    ret = True
    frame_id = 0
    while(ret):
    ret, frame = cap.read()
    if not ret:
    break
    stamp = rospy.rostime.Time.from_sec(float(frame_id) / prop_fps)
    frame_id += 1
    image = cb.cv2_to_compressed_imgmsg(frame)
    image.header.stamp = stamp
    image.header.frame_id = "camera"
    bag.write(TOPIC, image, stamp)
    cap.release()
    bag.close()


    if __name__ == "__main__":
    if len( sys.argv ) == 3:
    CreateVideoBag(*sys.argv[1:])
    else:
    print( "Usage: video2bag videofilename bagfilename")

    关于image - 如何将视频或图像序列转换为包文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31432870/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com