【发布时间】:2019-10-08 12:05:52
【问题描述】:
我正在尝试在 Webots 中使用 Pioneer 3AT 模拟线路跟随器。这是我的应用程序涉及群体机器人的第一步。我已经放置了相机。但是,我无法在模拟显示中(实时)显示使用 OpenCV 处理的图像。目前,我打算只设置车道阈值并使用 https://www.cyberbotics.com/doc/reference/display 中提到的显示节点进行显示。
但是,我无法启动并运行它。问题是如何在 webbots 显示器中显示处理后的 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))
现在,如何在display 中显示image?
我尝试了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())
【问题讨论】:
标签: python numpy opencv swig webots