ROS Melodic&;OpenCV-压缩图像未发布

ROS Melodic&;OpenCV-压缩图像未发布,opencv,raspberry-pi3,opencv3.0,ros,Opencv,Raspberry Pi3,Opencv3.0,Ros,我是新手。我正在玩集成OpenCV和ROS的游戏。我使用的代码是从ROS教程中获得的灵感,该教程介绍如何将ROS消息转换为CV::mat并返回 我正在订阅raspicam节点发布的主题/raspicam\u node/image/compressed。我在获取主题、将其转换为CV:mat并使用OpenCV对其进行修改方面没有问题。第32行打开一个窗口,显示修改后的CV:mat图像 我的问题在第36行。我可以使用rostopic list查看主题,但是当我echo时,它什么也没有出现。如果使用rq

我是新手。我正在玩集成OpenCV和ROS的游戏。我使用的代码是从ROS教程中获得的灵感,该教程介绍如何将ROS消息转换为CV::mat并返回

我正在订阅raspicam节点发布的主题
/raspicam\u node/image/compressed
。我在获取主题、将其转换为CV:mat并使用OpenCV对其进行修改方面没有问题。第32行打开一个窗口,显示修改后的CV:mat图像

我的问题在第36行。我可以使用
rostopic list
查看主题,但是当我
echo
时,它什么也没有出现。如果使用
rqt\u image\u视图
,则相同

有没有想过我错过了什么?谢谢大家!

#!/usr/bin/env python

from __future__ import print_function

import roslib
roslib.load_manifest('comp_vision')
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image, CompressedImage
from cv_bridge import CvBridge, CvBridgeError


class ImageConverter:

    def __init__(self):
        self.image_pub = rospy.Publisher("modified_image", CompressedImage, queue_size=10)
        self.brige = CvBridge()
        self.image_sub = rospy.Subscriber("/raspicam_node/image/compressed", CompressedImage, self.callback)

    def callback(self,data):
        try:
            cv_image = self.brige.compressed_imgmsg_to_cv2(data, "passthrough")
        except CvBridgeError as e:
            print(e)

        (rows, cols, channels) = cv_image.shape
        if cols > 60 and rows > 60:
            cv2.circle(cv_image, (50,50), 10, 255)

        cv2.imshow("Image Window", cv_image)
        cv2.waitKey(3)

        try:
            self.image_pub.publish(self.brige.cv2_to_compressed_imgmsg(cv_image))
        except CvBridgeError as e:
            print(e)


def main(args):
    ic = ImageConverter()
    rospy.init_node("image_converter", anonymous=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("shutting down")
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main(sys.argv)

如果您选中
rostopic echo/modified_image
,您可以看到您的主题已成功发布

rqt\u image\u视图
如果调用发布的主题
modified\u image/compressed
,将显示该主题

从:

将其发布在格式为image_raw/compressed的主题上。然后,任何使用image_transport的ROS节点都可以使用transport compressed订阅image_raw,就像在发布服务器端使用image_transport一样


检查返回的
.cv2\u to_compressed\u imgmsg()
type with
CompressedImage
消息,两者必须是相同类型的消息。