无法从.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,但不会创建任何内容
答案 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");
}