BourbonCreams

RGB+D image subscriber

Aug 9th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.47 KB | None | 0 0
  1. #! /usr/bin/python
  2.  
  3.  
  4. import rospy
  5. from sensor_msgs.msg import Image
  6. from cv_bridge import CvBridge, CvBridgeError
  7. import cv2
  8. import numpy as np
  9. import sys
  10. import time
  11.  
  12.  
  13. # Instantiate CvBridge
  14. bridge = CvBridge()
  15. c = -1
  16.  
  17.  
  18. def image_callback(msg):
  19.    
  20.     print("\nReceived an image!")
  21.     try:
  22.         # Convert your ROS Image message to OpenCV2
  23.         if image_topic == "/kinect2/hd/image_color":
  24.             cv2_img = bridge.imgmsg_to_cv2(msg, "bgr8")
  25.            
  26.         else:
  27.             depth_img = bridge.imgmsg_to_cv2(msg, "32FC1")
  28.             depth_img = np.array(depth_img, dtype=np.float32)
  29.             cv2.normalize(depth_img, depth_img, 0, 1, cv2.NORM_MINMAX)
  30.        
  31.     except CvBridgeError, e:
  32.         print(e)
  33.        
  34.     else:
  35.         global c
  36.         if(c == 24):
  37.             c = 0
  38.             print "Pictures taken - issue CTRL+C"
  39.             time.sleep(2)
  40.         c += 1
  41.        
  42.         if image_topic == "/kinect2/hd/image_color":
  43.             # Save the OpenCV2 image as png
  44.             cv2.imwrite('data/rgbd/lorenzos_desk/color_'+str(c)+'.png', cv2_img)
  45.         else:
  46.             np.save('data/rgbd/lorenzos_desk/depth_'+str(c)+'.npy', np.asarray(depth_img))
  47.            
  48.  
  49. def main():
  50.     global image_topic
  51.  
  52.     image_topic = str(sys.argv[1])
  53.     rospy.init_node('image_listener')
  54.     rospy.Subscriber(image_topic, Image, image_callback)
  55.     # Spin until ctrl + c
  56.     rospy.spin()
  57.  
  58. if __name__ == '__main__':
  59.     main()
Add Comment
Please, Sign In to add comment