Skip to content

Instantly share code, notes, and snippets.

@rethink-imcmahon
Last active April 17, 2024 08:09
Show Gist options
  • Save rethink-imcmahon/77a1a4d5506258f3dc1f to your computer and use it in GitHub Desktop.
Save rethink-imcmahon/77a1a4d5506258f3dc1f to your computer and use it in GitHub Desktop.
ROS Image Subscriber / JPEG Saver
#! /usr/bin/python
# Copyright (c) 2015, Rethink Robotics, Inc.
# Using this CvBridge Tutorial for converting
# ROS images to OpenCV2 images
# http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython
# Using this OpenCV2 tutorial for saving Images:
# http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_gui/py_image_display/py_image_display.html
# rospy for the subscriber
import rospy
# ROS Image message
from sensor_msgs.msg import Image
# ROS Image message -> OpenCV2 image converter
from cv_bridge import CvBridge, CvBridgeError
# OpenCV2 for saving an image
import cv2
# Instantiate CvBridge
bridge = CvBridge()
def image_callback(msg):
print("Received an image!")
try:
# Convert your ROS Image message to OpenCV2
cv2_img = bridge.imgmsg_to_cv2(msg, "bgr8")
except CvBridgeError, e:
print(e)
else:
# Save your OpenCV2 image as a jpeg
cv2.imwrite('camera_image.jpeg', cv2_img)
def main():
rospy.init_node('image_listener')
# Define your image topic
image_topic = "/cameras/left_hand_camera/image"
# Set up your subscriber and define its callback
rospy.Subscriber(image_topic, Image, image_callback)
# Spin until ctrl + c
rospy.spin()
if __name__ == '__main__':
main()
@asps946701
Copy link

asps946701 commented Jul 26, 2022

Hello, I'm sorry, I'm still new using ROS. I wanted to ask where does the file saved?

Image location in your "Catkin_make" folder that you uing "Catkin_make" command

@Yuan-Quan
Copy link

I need to play back the rosbag at a slower speed to capture all the frames, or some of them will be lost. Is there a more elegant solution?

@Petros626
Copy link

I need to play back the rosbag at a slower speed to capture all the frames, or some of them will be lost. Is there a more elegant solution?

I think on the ros Wiki, there a Parameter where you can adjust the playback speed.

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