rosbag提取压缩格式的图像和非压缩格式的图像(附python代码)

本文介绍如何从ROSbag文件中提取压缩和非压缩图像,使用Python、numpy和opencv。只需更改代码中的图像保存路径和ROSbag文件路径,创建一个名为get_img.py的脚本并赋予执行权限,通过rosrun命令运行。
摘要由CSDN通过智能技术生成

rosbag提取压缩格式的图像和非压缩格式的图像,只需要修改代码里面的图像保存路径和rosbag文件路径即可运行;

运行时候,先在项目下面src 目录下面建立一个 scripts 文件夹,然后新建一个python文件保存以下代码,比如 get_img.py , 最后记得改一下文件权限 sudo chmod 777  get_img.py , 然后运行 rosrun xxx get_img.py, xxx 是你的ros项目名称。

#!/usr/bin/python
# coding:utf-8


# Extract images from a bag file.


import roslib
import rosbag
import rospy
import cv2
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
from cv_bridge import CvBridgeError

save_rgb_path = '/home/long/01/'  # 已经建立好的存储rgb彩色图文件的目录,没有这个目录的话需要先创建一个
bag_path = '/mnt/f/hall05/hall_05.bag'


class ImageCreator():
    def __init__(self):
        self.bridge
ROS(Robot Operating System)中,`rospy`库主要用于节点间的通信,而处理图像消息通常需要`cv_bridge`(Computer Vision Bridge)包,它帮助在ROS的不同视觉主题之间转换数据格式。如果你想要从`*.bag`文件中读取包含图片的数据,并将其转换为BMP格式输出,可以按照以下步骤操作: 1. 首先,安装必要的依赖包: ```bash pip install rospy cv_bridge rosbag matplotlib ``` 2. 使用Python编写一个脚本,导入所需的库: ```python import rospy from cv_bridge import CvBridge, CvBridgeError import rosbag from sensor_msgs.msg import Image from io import BytesIO import matplotlib.pyplot as plt import numpy as np ``` 3. 初始化ROS节点和`cv_bridge`实例: ```python bridge = CvBridge() bag = rosbag.Bag('your_rosbag_file.bag') ``` 4. 定义一个回调函数来处理接收到的图片消息: ```python def image_callback(msg): try: # 将ROS Image message转换为OpenCV的Mat对象 cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding="bgr8") # 保存为BMP图像 img_bmp = cv2.imencode('.bmp', cv_image)[1] with open("output.bmp", "wb") as f: f.write(img_bmp) # 显示图片 plt.imshow(cv_image) plt.show(block=False) # 或者删除这一行,如果不显示 except CvBridgeError as e: print(e) # 订阅图片话题 sub = bag.subscribe('/camera/image_raw', 1, image_callback) ``` 5. 循环遍历`rosbag`中的消息: ```python for topic, msg, t in bag.read_messages(topics=['/camera/image_raw']): pass ``` 6. 最后关闭文件和停止订阅: ```python bag.close() sub.unregister() ``` 运行这个脚本时,它会读取指定的`.bag`文件,找到所有`/camera/image_raw`话题的消息,并将它们转换成BMP格式存储到本地文件`output.bmp`中。同时,如果设置了`plt.imshow()`,它还会显示每一张图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云-激光雷达-Slam-三维牙齿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值