我一直在通过图像处理本地化项目进行本地化工作,我们得到的数据集是.bag文件中的压缩图像,所以我有多种方法来提取这些图像,我尝试了以下方法:
mkdir images
cd ./images
rosrun image_view extract_images _sec_per_frame:=0.01 image:=<IMAGETOPICINBAGFILE>
run rosbag play <BAGFILE>
我也尝试使用启动文件
<launch>
<node pkg="rosbag" type="play" name="rosbag" args="-d 2 /home/devo/datasets/Ch2_002/HMB_1.bag"/>
<node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME" args="compressed">
<remap from="image" to="/camera/image_raw"/>
<param name="image_transport" value="compressed"/>
</node>
</launch>
但它总是最终给我同样的错误
[ERROR] [1486685243.634766995]:客户端[/ extract_images_1486684806987962257]希望主题/ can_bus_dbw / can_rx具有数据类型/ md5sum [sensor_msgs / Image / 060021388200f6f0f447d0fcd9c64743],但我们的版本有[dataspeed_can_msgs / CanMessageStamped / 33747cb98e223cafb806d7e94cb4071f]。丢弃连接。
所以我只是想知道我做错了什么以及如何从包中提取这些图像(知道我的ROS版本:1.12.6)
答案 0 :(得分:0)
尝试下面的内容:
1-在可写目录中:
$ rosrun image_view extract_images image:=<IMAGETOPICINBAGFILE> _image_transport:=compressed
2 - 在另一个终端,播放您的包文件
这应该将您的图像保存在该目录中。
现在,如果那不起作用,你确定你的image_transport压缩是真的吗?导致错误意味着同一主题上的发布者和订阅者具有不同的消息类型。如果您使用不同的平台创建包,并且使用不同于您正在播放的消息定义的消息定义,则也可能发生这种情况。
修改:
另一种方法是解压缩数据然后保存。它是这样的:
$rosrun image_transport republish compressed in:=<IMAGETOPICINBAGFILE> raw out:=image/raw
$rosrun image_view image_saver image:=image/raw _save_all_image:=all _filename_format:=%04d.%s
$ rosbag play <bagfile>
希望有所帮助!