невозможно извлечь видео из файла сумки - PullRequest
0 голосов
/ 03 июня 2019

Невозможно извлечь видео из файла .bag, записанного камерой RPi. Идея состоит в том, чтобы иметь возможность работать с видео в другом объеме.

Я пробовал решение от 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 голосов
/ 03 июня 2019

То, что вы хотите, довольно просто, можете загрузить сумку для меня, чтобы посмотреть ??Я могу помочь дать вам простой узел для получения данных

Если вы хотите попробовать сами, следуйте приведенным ниже инструкциям.

Сначала вы должны убедиться, что в сумке есть действительные данные и действительная упаковка.Например, данные не повреждены или связанный с OCV пакет segfault

Во-вторых, выясните тип изображения.это sensor_msgs Изображение или сжатое изображение.Есть разница при конвертации

В-третьих, наименее вероятно, но вы уверены, что opencv imwrite правильно работает в ROS?У меня была забавная ошибка ввода-вывода и графического интерфейса пользователя раньше, когда я использовал свой собственный opencv, связанный с ros.

РЕДАКТИРОВАТЬ

используйте пакет 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...