【问题标题】:ROS Melodic & OpenCV - CompressedImage not publishingROS Melodic & OpenCV - CompressedImage 未发布
【发布时间】:2018-08-11 18:29:43
【问题描述】:

我是 ROS 的新手。我正在玩集成 OpenCV 和 ROS。我正在使用的代码的灵感来自 ROS 教程,该教程将 ROS 消息转换为 CV::mat 并返回。

我正在订阅由 raspicam 节点发布的主题/raspicam_node/image/compressed。我可以毫无问题地获取主题,将其转换为 CV:mat,并使用 OpenCV 对其进行修改。第 32 行打开一个窗口并显示修改后的 CV:mat 图像。

我的问题出现在第 36 行。我可以使用 rostopic list 看到该主题,但是当我使用 echo 时,什么也没有出现。如果我使用rqt_image_view,则相同。

对我缺少什么有什么想法吗?谢谢!

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

【问题讨论】:

  • 检查返回的.cv2_to_compressed_imgmsg() 类型和CompressedImage 消息,两者必须是相同类型的消息。

标签: opencv raspberry-pi3 opencv3.0 ros


【解决方案1】:

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

如果您将发布的主题称为modified_image/compressedrqt_image_view 将显示它。

来自compressed_image_transport wiki

将其发布在 image_raw/compressed 形式的主题上。然后任何使用 image_transport 的 ROS 节点都可以订阅传输压缩后的 image_raw,就像在发布者端使用 image_transport 一样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多