Skip to content

Instantly share code, notes, and snippets.

@jdrew1303
Forked from wngreene/bag_to_images.py
Created December 26, 2019 02:13
Show Gist options
  • Save jdrew1303/2788827e31a82fa9dae56bb6470640b7 to your computer and use it in GitHub Desktop.
Save jdrew1303/2788827e31a82fa9dae56bb6470640b7 to your computer and use it in GitHub Desktop.
Extract images from a rosbag.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2016 Massachusetts Institute of Technology
"""Extract images from a rosbag.
"""
import os
import argparse
import cv2
import rosbag
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
def main():
"""Extract a folder of images from a rosbag.
"""
parser = argparse.ArgumentParser(description="Extract images from a ROS bag.")
parser.add_argument("bag_file", help="Input ROS bag.")
parser.add_argument("output_dir", help="Output directory.")
parser.add_argument("image_topic", help="Image topic.")
args = parser.parse_args()
print "Extract images from %s on topic %s into %s" % (args.bag_file,
args.image_topic, args.output_dir)
bag = rosbag.Bag(args.bag_file, "r")
bridge = CvBridge()
count = 0
for topic, msg, t in bag.read_messages(topics=[args.image_topic]):
cv_img = bridge.imgmsg_to_cv2(msg, desired_encoding="passthrough")
cv2.imwrite(os.path.join(args.output_dir, "frame%06i.png" % count), cv_img)
print "Wrote image %i" % count
count += 1
bag.close()
return
if __name__ == '__main__':
main()
@jdrew1303
Copy link
Author

jdrew1303 commented Feb 12, 2020

hey @pramodkhandalkar

You need to make sure that you have ROS installed on the computer you're running this script on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment