如何从rosbag提取图片(CompressedImage)之使用Python脚本文件

11 篇文章 0 订阅

又是一个深夜,这是一个初五的夜晚,之前我在csdn上找了很多用于从rosbag中提取图片的方法(想要提取带时间戳),但毫无例外都报错了,而且之前使用launch文件的提取方法会遗漏很多图片。

主要是因为我这部分是CompressedImage类型,与无压缩的图片存在一定的差别,所以使用多篇文章的提取无压缩图片方法容易报错。于是乎,我打开了csdn社区寻找方法。在这个链接中 https://blog.csdn.net/memoryd/article/details/105174348?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242 寻找到了合适的解决方案,我将代码按照我的配置和topic修改后运行发现,可以跑动图像说明读取压缩型的image是可行的。然后我将代码进行了修改,与之前别的代码不一样的是,我的代码需要另建一个文件夹,例如,我在dataset文件夹下建立了image文件夹,将test.py和我的bag文件放置在image文件夹下。

以下代码是我修改后的Python代码,在原有展示的基础上增加了存储图像并命名为时间戳的代码:

#coding:utf-8

import rosbag
import roslib;   #roslib.load_manifest(PKG)
import rospy
import cv2
from cv_bridge import CvBridge
from sensor_msgs.msg import Image

bag_file = 'irat_aus_28112011.bag'
bag = rosbag.Bag(bag_file, "r")

bridge = CvBridge()
bag_data = bag.read_messages('/irat_red/camera/image/compressed')
for topic, msg, t in bag_data:
    cv_image = bridge.compressed_imgmsg_to_cv2(msg, "bgr8")
    cv2.imshow("Image window", cv_image) 
    # imshow可有可无只是为了检验是否在提取图像,并展示                      
    timestr = "%.6f" %  msg.header.stamp.to_sec()
    #%.6f表示小数点后带有6位,可根据精确度需要修改;
    image_name = timestr+ ".jpg" #图像命名:时间戳.jpg
    cv2.imwrite(image_name, cv_image)  #保存;
    cv2.waitKey(3)

 在和bag文件一样路径下进行运行,我们就可以看到该文件夹在进行提取图像了。

edward@edward:~/dataset/image$ python test.py

我们运行了之后可以发现提取出来的图像数量和bag文件中的数量是一致的,同时也带有时间戳,因此提取是很成功的。

 

以下链接都是无压缩的方案:

https://blog.csdn.net/qq_22059843/article/details/103018216

https://blog.csdn.net/yourgreatfather/article/details/87783906?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

https://wiki.ros.org/rosbag/Tutorials/Exporting%20image%20and%20video%20data

关于irat_aus_28112011.bag,以下是下载链接:

https://download.csdn.net/download/loveSIYU/15711173

  • 11
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值