python - 显示处理后的 numpy 图像的 Webbots (OpenCV Python)

标签 python numpy opencv swig webots

我正在尝试在 Webots 中使用 Pioneer 3AT 模拟巡线员。这是我的群体机器人应用的第一步。我已经放置了相机。但是,我无法在模拟显示中(实时)显示使用 OpenCV 处理的图像。目前,我计划仅使用显示节点对 channel 进行阈值设置并进行显示,如 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 我尝试了 imageNewimagePaste 等。但是,我通过 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 个小时的努力,还是没有成功。

Note [Java]: The Display.imageNew function can display the image returned by the Camera.getImage function directly if the pixel format argument is set to ARGB.

display.imageNew(cameraData,display.ARGB,camera.getHeight(),camera.getWidth())

最佳答案

我找到了一种“官方方式”来启动并运行它。但是,我不喜欢这个解决方案,因为它没有直接集成到模拟器中(并且使用此方法时模拟变得太慢)。现在,我接受这个答案。不过,我会接受任何其他能完美集成到 Webots 中的答案。

cv2.startWindowThread()
cv2.namedWindow("preview")

while (robot.step(timestep) != -1):
    cv2.imshow("preview", image)
    cv2.waitKey(TIME_STEP)

来源: https://cyberbotics.com/forum?message=7950

关于python - 显示处理后的 numpy 图像的 Webbots (OpenCV Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58286019/

相关文章:

python - 加入 Pandas 数据框中的重复列

python - 根据条件获取数组索引位置

python - Matplotlib 1.3.1 : plot(matrix ("1,2,3")) -> RuntimeError: maximum recursion depth exceeded

c++ - 如何将 JPEG 转换为 DCT 8 x 8?

python - 如何使用OPENCV从原始图像中减去图像的 “hue”

c++ - OpenCV C++膨胀运算符帮助

python - scikit-learn:随机森林 class_weight 和 sample_weight 参数

python - 使用OLS基础学习者进行梯度提升

ubuntu - 如何在 Ubuntu 14.04 中让正确的 numpy 为 python 3 工作

python - 在 vim 中自动插入标题