ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
Execution: $ rosrun package_name file_name.py directory_name_to_store_information
#! /usr/bin/python
import os
import sys
import cv2
import csv
import rospy, rosbag
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
# Verifying output directory where Images and metadata(csv) will be stored
if len(sys.argv) == 2:
out_dir = sys.argv[1]
if not os.path.exists(sys.argv[1]):
os.makedirs(out_dir)
else:
print sys.argv[1], 'already exists'
sys.exit()
else:
print 'specify output directory'
sys.exit()
bridge = CvBridge()
def main():
# Topic name
topicName0 = '/topic/image_raw/compressed'
# Bag file
inbag_name ='/Path/2018-05-15-16-42-43.bag'
bag = rosbag.Bag(inbag_name)
for topic, msg, t in bag.read_messages():
if(topic == topicName0 ):
try:
# Convert compressed image to RAW
img = bridge.compressed_imgmsg_to_cv2(msg)
except CvBridgeError, e:
print(e)
else:
# Writing image to the directory mentioned while executing script
cv2.imwrite(sys.argv[1]+'/frame_' + str(msg.header.stamp) + '.jpeg', img)
# Saving metadata information as per requirement
with open(sys.argv[1]+'/metadata.csv','ab') as f:
thewriter = csv.writer(f)
thewriter.writerow([str(msg.header.seq),str(msg.header.stamp),os.getcwd()+'/'+sys.argv[1]+'/', 'frame_'+ str(msg.header.stamp) + '.jpeg'])
bag.close()
rospy.spin()
if __name__ == "__main__":
main()