我最近才刚刚启动OpenCv,因此对任何愚蠢的问题表示歉意。
所以我的最终目标是将视频从ZED摄像机流传输到VR头戴式耳机,而且由于相关插件无法在我的Linux机器上正常工作,因此我在Unity或UnReal方面没有任何运气。我需要能够将双摄像头与ZED设备隔离开来,但是现在只有ROS允许我访问任一摄像头的单独主题。
因此,我使用ZED包装器将图像数据发布到ROS节点上,并找到了与here中的ROS消息进行交互的代码。
该代码可以完美运行,并且能够显示在监视器上捕获的图像流。但是我的问题是我如何基本上将这些图像保存到缓冲区/队列中?
我将示例修改为代码,以尝试返回由cvBridge转换的图像,但是我没有任何运气使返回的图像显示在屏幕上。可能是因为图像首先被初始化为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()
我经历了如此艰难的时期,试图弄清楚如何做到这一点,因此,非常感谢您的帮助。谢谢!
答案 0 :(得分:0)
您的回叫功能具有以下代码:
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
语句是错字,可能无法执行。