ROS Melodic & OpenCV - CompressedImage 未发布



我是ROS的新手。我正在玩集成OpenCV和ROS。我使用的代码的灵感来自于ROS教程中关于将ROS消息转换为CV::mat和back的内容。

我订阅了raspcam节点发布的主题/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)

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

如果您将已发布的主题称为modified_image/compressed,则rqt_image_view将显示它。

从compressed_image_transport wiki:

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

最新更新