无法从bag文件中提取视频

时间:2019-06-03 11:11:15

标签: video ros

无法从.RPi摄像机录制的.bag文件中提取视频。这个想法是为了能够在另一个范围内使用视频。

我已经尝试过http://wiki.ros.org/rosbag/Tutorials/Exporting%20image%20and%20video%20data的解决方案 但它停止并抛出:

所需的进程[rosbag-1]已死! 流程已顺利完成 日志文件:/user/.ros/log/8541738e-85e9-11e9-8dfb-6c8814b5a5c8/rosbag-1*.log 开始关机!

预期框架%04d.jpg,但不会创建任何内容

1 个答案:

答案 0 :(得分:0)

您要的很简单,可以上传包给我看看吗?我可以为您提供一个简单的节点来获取数据

如果您想自己尝试,请遵循以下准则。

首先,您必须验证包装袋中是否包含有效数据和有效包装。例如,数据未损坏或与OCV相关的软件包段错误

第二找出图像类型。是sensor_msgs图片还是压缩图片。转换时有所不同

第三,可能性最小,但是您确定opencv imwrite在ROS中可以正确运行吗?在ros中使用自己的opencv之前,我遇到了有趣的IO和gui错误。

编辑

使用下面的ros软件包。

https://github.com/snakehaihai/rosbag_to_video_cpp

我已经为您创建了一个软件包。并且您的视频位于

https://github.com/snakehaihai/rosbag_to_video_cpp/blob/master/ros_bag_to_video_cpp/src/out.avi

#include <ros/ros.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;

cv::VideoWriter video_out("out.avi",CV_FOURCC('M','J','P','G'),10, cv::Size(640,480),true);


void imagecompressedCallback(const sensor_msgs::CompressedImageConstPtr& msg)
{
  try
  {
    cv::Mat image = cv::imdecode(cv::Mat(msg->data),1);//convert compressed image data to cv::Mat
    cv::imshow("view", image);
    video_out.write(image);
    cv::waitKey(10);
  }
  catch (cv_bridge::Exception& e)
  {
    ROS_ERROR("Could not convert to image!");
  }
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "image_listener");
  ros::NodeHandle nh;
  cv::namedWindow("view");
  cv::startWindowThread();
  ros::Subscriber sub = nh.subscribe("/raspicam_node/image/compressed", 1, imagecompressedCallback);
  ros::spin();
  cv::destroyWindow("view");
}