当前位置:   article > 正文

ROS与Opencv基础篇_ros opencv

ros opencv
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import rospy
  4. import cv2
  5. from cv_bridge import CvBridge, CvBridgeError
  6. from sensor_msgs.msg import Image
  7. class image_converter:
  8. def __init__(self):
  9. # 创建cv_bridge,声明图像的发布者和订阅者
  10. self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
  11. self.bridge = CvBridge()
  12. self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.callback)
  13. def callback(self,data):
  14. # 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式
  15. try:
  16. cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
  17. except CvBridgeError as e:
  18. print (e)
  19. # 在opencv的显示窗口中绘制一个圆,作为标记
  20. (rows,cols,channels) = cv_image.shape
  21. if cols > 60 and rows > 60 :
  22. cv2.circle(cv_image, (60, 60), 30, (0,0,255), -1)
  23. # 显示Opencv格式的图像
  24. cv2.imshow("Image window", cv_image)
  25. cv2.waitKey(3)
  26. # 再将opencv格式额数据转换成ros image格式的数据发布
  27. try:
  28. self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
  29. except CvBridgeError as e:
  30. print (e)
  31. if __name__ == '__main__':
  32. try:
  33. # 初始化ros节点
  34. rospy.init_node("cv_bridge_test")
  35. rospy.loginfo("Starting cv_bridge_test node")
  36. image_converter()
  37. rospy.spin()
  38. except KeyboardInterrupt:
  39. print ("Shutting down cv_bridge_test node.")
  40. cv2.destroyAllWindows()

分析以上例程代码的关键部分:

  1. import cv2
  2. from cv_bridge import CvBridge, CvBridgeError

要调用Opencv,必须先导入Opencv模块,另外还应导入cv_bridge所需的一些模块

  1. self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
  2. self.bridge = CvBridge()
  3. self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.callback)

定义一个Subscriber接收原始的图像消息,再定义一个Publisher发布Opencv处理后的图像消息还要定义一个句柄,便于调用相关的转换接口

  1. try:
  2. cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
  3. except CvBridgeError as e:
  4. print (e)
  1. try:
  2. self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
  3. except CvBridgeError as e:
  4. print (e)

cv2_to_imgmsg()接口的功能是将opencv格式的图像数据转换成ROS图像消息,该接口要求输入图像数据流和数据格式两个参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/599214
推荐阅读
相关标签
  

闽ICP备14008679号