detect_node.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python3
  2. import rclpy
  3. from rclpy.node import Node
  4. from sensor_msgs.msg import Image
  5. from cv_bridge import CvBridge
  6. import freetype
  7. import cv2
  8. class DetectSubscriber(Node):
  9. def __init__(self):
  10. super().__init__("detect_node")
  11. # 初始化CvBridge
  12. self.bridge = CvBridge()
  13. # 订阅detect话题
  14. self.subscription = self.create_subscription(
  15. Image,
  16. 'detect',
  17. self.image_callback,
  18. 10
  19. )
  20. self.subscription
  21. self.get_logger().info('检测节点已启动,正在监听 detect 话题...')
  22. def image_callback(self, msg):
  23. try:
  24. # 将ROS图像消息转换为OpenCV格式
  25. cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')
  26. # 显示图像
  27. cv2.imshow('Detect Image', cv_image)
  28. cv2.waitKey(1)
  29. # 输出图像信息
  30. self.get_logger().info(f'收到检测图像:{msg.width}x{msg.height}, 时间戳: {msg.header.stamp.sec}.{msg.header.stamp.nanosec}')
  31. except Exception as e:
  32. self.get_logger().error(f'处理图像失败:{str(e)}')
  33. def main(args=None):
  34. rclpy.init(args=args)
  35. node = DetectSubscriber()
  36. try:
  37. rclpy.spin(node)
  38. except KeyboardInterrupt:
  39. pass
  40. finally:
  41. cv2.destroyAllWindows()
  42. node.destroy_node()
  43. rclpy.shutdown()
  44. if __name__ == '__main__':
  45. main()