简体   繁体   English

ROS Melodic和OpenCV-CompressedImage未发布

[英]ROS Melodic & OpenCV - CompressedImage not publishing

I am new to ROS. 我是ROS的新手。 I am playing with integrating OpenCV and ROS. 我正在集成OpenCV和ROS。 The code I am using is inspired from the ROS tutorial on converting ROS messages to CV::mat and back. 我使用的代码是从ROS教程启发而来的,该教程将ROS消息转换为CV :: mat并返回。

I am subscribing to the topic /raspicam_node/image/compressed published by the raspicam node. 我正在订阅raspicam节点发布的主题/raspicam_node/image/compressed I have no problem getting the topic, converting it to CV:mat, and modifying it with OpenCV. 我可以轻松获取主题,将其转换为CV:mat,并使用OpenCV对其进行修改。 Line 32 opens a window and shows me the modified CV:mat image. 第32行打开一个窗口,向我显示修改后的CV:mat图像。

My issue comes at Line 36. I can see the topic using rostopic list but when I echo it nothing comes up. 我的问题出现在第36行。我可以使用rostopic list看到该主题,但是当我echo它时,什​​么也没出现。 Same if I use rqt_image_view . 如果使用rqt_image_view相同。

Any thoughts on what I am missing? 对我想念的东西有什么想法吗? Thank you! 谢谢!

#!/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)

If you check rostopic echo /modified_image you can see that your topic is successfully published. 如果检查rostopic echo /modified_image ,则可以看到您的主题已成功发布。

rqt_image_view will display it if you call your published topic modified_image/compressed . 如果您调用已发布的主题rqt_image_view modified_image/compressed rqt_image_view将显示它。

From the compressed_image_transport wiki : compressed_image_transport Wiki

publish it on a topic of the form image_raw/compressed. 将其发布为image_raw / compressed形式的主题。 Then any ROS node using image_transport can subscribe to image_raw with transport compressed, just as if image_transport were used on the publisher side 然后,任何使用image_transport的ROS节点都可以通过压缩的传输来订阅image_raw,就像在发布方使用了image_transport一样

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM