gpt4 book ai didi

Python OpenCV : Returning cvBridge Image from ROS

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:26 24 4
gpt4 key购买 nike

我最近刚开始使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com