ros订阅图像话题
时间: 2023-06-28 15:11:50 浏览: 146
在ROS中订阅图像话题可以使用`image_transport`和`cv_bridge`两个包来完成。
首先,在程序中引入相关的包和头文件:
```python
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
```
然后,定义一个类来实现订阅图像话题的功能:
```python
class ImageSubscriber(object):
def __init__(self):
# 初始化ROS节点
rospy.init_node('image_subscriber', anonymous=True)
# 初始化cv_bridge
self.bridge = CvBridge()
# 订阅图像话题
self.image_sub = rospy.Subscriber('/camera/image_raw', Image, self.callback)
# 显示图像
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
def callback(self, data):
try:
# 将ROS图像消息转换为OpenCV格式
cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
except CvBridgeError as e:
print(e)
return
# 显示图像
cv2.imshow("image", cv_image)
cv2.waitKey(1)
```
代码中的`/camera/image_raw`是图像话题的名称,可以根据实际情况进行修改。`callback`函数是回调函数,当有新的图像消息到达时就会被调用。
最后,在主函数中创建一个`ImageSubscriber`对象即可:
```python
if __name__ == '__main__':
try:
# 创建ImageSubscriber对象
sub = ImageSubscriber()
# 循环等待回调函数
rospy.spin()
except rospy.ROSInterruptException:
pass
# 关闭窗口
cv2.destroyAllWindows()
```
运行程序后,就可以实时显示图像了。
阅读全文