Python OpenCV : Returning cvBridge Image from ROS

标签 python opencv ros

我最近刚开始使用 OpenCv,对于任何愚蠢的问题深表歉意。

所以我的最终目标是将视频从我的 ZED 相机流式传输到 VR 耳机上,我在 Unity 或 UnReal 中没有任何运气,因为相关插件无法在我的 Linux 机器上运行。我需要能够将双摄像头与我的 ZED 设备隔离开来,但现在只有 ROS 允许我访问任一摄像头的各个主题。

所以我使用 ZED 包装器将图像数据发布到 ROS 节点上,并找到了与来自 here 的 ROS 消息交互的代码.

该代码运行良好,我能够在我的显示器上显示捕获的图像流。但我的问题是如何将这些图像基本上保存到缓冲区/队列中?

我将示例修改为代码以尝试返回由 cvBridge 转换的图像,但我没有任何运气让返回的图像显示在屏幕上。想可能是因为Image一开始被初始化为None,所以cv2.imshow()无法显示空图。但是如何检查其余图像是否正确返回?这是我的代码:

import cv2
import rospy

from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
from Queue import Queue


class ImageConverter(object):

    def __init__(self, object):

        self.topic=object
        self.bridge= CvBridge()
        self.image_queue = Queue(maxsize=100)
        self.image_sub = rospy.Subscriber(self.topic, Image, self.callback, queue_size=100)
        self.image=None

    def callback(self, data):

        try:
            cv_image=self.bridge.imgmsg_to_cv2(data, "bgr8")
        except CvBridgeError as e:
            print(e)
        else:
                self.image = cv_image
                self.image_queue.put(cv_image)

def get_image(self):

        try:
                image = self.image_queue.get(block=False)
        except:
                image = self.image

        cv2.imshow("Image window", image)
        cv2.waitKey(3)

def subscribe(position):

    ic= ImageConverter(position)
    ic.get_image()
    rospy.init_node('image_converter', anonymous=True)

    try:
        rospy.spin()
    except KeyboardInterrupt:
        print ("goodbye")
    cv2.destroyAllWindows()

我在尝试弄清楚如何做到这一切时遇到了如此困难的时间,因此非常感谢任何帮助。谢谢!

最佳答案

您的回调函数具有以下代码:

try:
        cv_image=self.bridge.imgmsg_to_cv2(data, "bgr8")
except CvBridgeError as e:
        print(e)
else:
            self.image = cv_image
            self.image_queue.put(cv_image)

我认为您的 else 语句有误,可能不会被执行。

关于Python OpenCV : Returning cvBridge Image from ROS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291183/

相关文章:

opencv - 如何比较图像以识别图像中的人?

python - ROS1 catkin_make 失败 : catkin_install_python() called without required DESTINATION argument

c++ - 你能解释一下这个语法吗:ros::Rate loop_rate(10);

python - 使用 ortools 选择列表中两个最小的整数值

opencv - 我怎样才能匹配两个撕裂的边缘?

python - 可以使用InstantDjango而不是正常安装吗

c++ - 理解 OpenCV 的 undistort 函数

python - 当rospy.is_shutdown时停止serve_forever

python - 仅使用标准库将 curl POST 请求转换为 Python

Python - 打开新的 shell 并运行命令