我正在Webots中使用Pioneer 3AT模拟行跟随器。这是我的应用程序涉及群体机器人的第一步。我已放置相机。但是,我无法在模拟显示中实时显示使用OpenCV处理的图像。现在,我打算仅限制车道并使用https://www.cyberbotics.com/doc/reference/display中提到的显示节点进行显示。
但是,我无法启动并运行它。问题是如何在Webots显示器中显示已处理的numpy图像数组?
我当前拥有的代码:
camera = Camera("camera")
camera.enable(TIME_STEP);
display = Display("display")
while (robot.step(timestep) != -1):
cameraData = camera.getImage();
image = np.frombuffer(cameraData, np.uint8).reshape((camera.getHeight(), camera.getWidth(), 4))
现在,如何显示image
中的display
?我尝试了imageNew
,imagePaste
等。但是,通过SWIG我收到了很多C / C ++错误,而且我也找不到任何相关的示例。 (Webots模拟器仅附带一个使用display city.wbt和静态图像的示例。我不确定是否可以使用。但是,该示例的摘要代码在C中如下所示。) >
// speedometer WbDeviceTag display; int display_width = 0; int display_height = 0; WbImageRef speedometer_image = NULL; // initialize display (speedometer) if (enable_display) { display = wb_robot_get_device("display"); speedometer_image = wb_display_image_load(display, "speedometer.png"); } // display background wb_display_image_paste(display, speedometer_image, 0, 0, false);
P.S .:我在此上花费了4多个小时,但找不到任何解决方案。 Qt上似乎存在类似的问题(我没有使用Qt)。但是,这个问题没有得到答案:Ploting an image with 'imshow' of opencv in webots。在我计划将我的整个项目开源时,任何帮助将不胜感激。
编辑1:
根据following note for Java,我尝试了以下方法。但是,我的显示屏空白。经过10小时的努力,没有运气。注
[Java]:如果将像素格式参数设置为ARGB,则Display.imageNew
函数可以直接显示由Camera.getImage
函数返回的图像。
display.imageNew(cameraData, display.ARGB, camera.getHeight(), camera.getWidth())
我正在Webots中使用Pioneer 3AT模拟行跟随器。这是我的应用程序涉及群体机器人的第一步。我已放置相机。但是,我无法显示...
当前,我找到了一种解决方法(实际上不是解决方案;因此,我将不接受此作为答案)。