opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法
利用自定义的图像类型代替sensor_msgs/Image, python2可以使用cv_bridge,但是python3不可以使用cv_bridge,所以在python2节点使用cv_bridge,python3不使用cv_bridge, 利用自定义的消息类型在python2和python3节点传送图像数据。
1. 自定义图像消息类型 Image_Msg.msg
int32 height
int32 width
int32 channels
uint8[] data
python2节点:图像订阅相机图像消息后,利用自定义的图像消息类型将图像发送给另一个python3的节点
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
import rospy
import numpy as np
import os
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
from nn_vs.msg import Image_Msg
import cv2
class image_listenner:
def __init__(self):
self.bridge = CvBridge()
self.image_sub = rospy.Subscriber("/probot_anno/hand_camera/hand_image_raw",Image,self.image_sub_callback)
self.image_pub = rospy.Publisher('/image_data', Image_Msg, queue_size