バッグから写真と点群データを抽出します

一部のLIDARポイントクラウドデータと双眼カメラ画像データは以前に記録されており、後で使用するためにバッグから抽出する必要があります。

バッグから点群を抽出します

バッグから点群データを抽出します

バッグから写真を抽出します

バッグ情報を見る

rosbag info yourname.bag

次の図でバッグパッケージ情報を確認できます。
点群データは663フレーム、点群トピックは/ rfans_driver / rfans_points
画像データは1984フレーム、トピックは/ mynteye / left / image_colorおよび/ mynteye / right / image_color
ここに画像の説明を挿入

画像を抽出する

インターネットで検索するいくつかの方法を試しました。それは、langchファイルを書き込み、rosノードを実行して取得することですが、画像にタイムスタンプがなく、画像が完全に抽出されていません。だから私は写真を取得するために次のコードフォームを見つけました、写真の数は正確でタイムスタンプが付いています。Pythonコード:

#coding:utf-8

import roslib;  
import rosbag
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
from cv_bridge import CvBridgeError

path='/home/hyper/Downloads/image/' #存放图片的位置
class ImageCreator():

    def __init__(self):
        self.bridge = CvBridge()
        with rosbag.Bag('2020-10-13-10-31-59.bag', 'r') as bag:   #要读取的bag文件;
            for topic,msg,t in bag.read_messages():
                if topic == "/mynteye/left/image_color":  #图像的topic;
                        try:
                            cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")
                        except CvBridgeError as e:
                            print e
                        timestr = "%.6f" %  msg.header.stamp.to_sec()
                        #%.6f表示小数点后带有6位,可根据精确度需要修改;
                        image_name = timestr+ ".jpg" #图像命名:时间戳.jpg
                        cv2.imwrite(path+image_name, cv_image)  #保存;


if __name__ == '__main__':

    try:
        image_creator = ImageCreator()
    except rospy.ROSInterruptException:
        pass

対応するパスを変更するだけです。コードとバッグを同じフォルダに入れ、ターミナルを開いてコードを実行し、待つと、操作中に画像フォルダに継続的に抽出された画像を見ることができます。
実行中のコードは次のとおりです。

python get_image.py

おすすめ

転載: blog.csdn.net/qq_38337524/article/details/109144187