如何使用imshow在多个窗口中显示多个图像?

prg*_*enz 7 c++ opencv

我想做以下的事情,以便在屏幕上显示两个图像:

imshow("1", img1);
imshow('2', 'img2');
Run Code Online (Sandbox Code Playgroud)

有可能吗?

谢谢!

Sai*_*kat 11

对的,这是可能的.该功能void imshow(const string& winname, InputArray mat)在指定的窗口中显示图像,其中 -

  • winname - 窗口名称.
  • 图像 - 要显示的图像.

窗口由其名称标识.所以在两个不同的窗口中显示两个图像(img1,img2); 使用imshow不同的名称,如: -

imshow("1",img1);
imshow("2",img2);
Run Code Online (Sandbox Code Playgroud)


小智 6

我有这个在 Python 中工作,有一个警告:

cv2.imshow("image 1", my_image_1)
cv2.imshow("image 2", my_image_2)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

需要注意的是,两个窗口都在屏幕上完全相同的位置,因此看起来只打开了一个窗口(Ubuntu 14.4)。我可以用鼠标将一个拖到另一个的一侧。

我现在正在寻找如何自动将两者并排放置,这就是我发现这个问题的方式..

  • 您可以像这样移动窗口: cv2.moveWindow("image 2", 0, 0) (7认同)

bug*_*123 5

下面是如何在 Python 中执行此操作:

    cv2.namedWindow("Channels")
    cv2.imshow("Channels", image_channels)

    cv2.namedWindow("Main")
    cv2.imshow("Main", image_main)
Run Code Online (Sandbox Code Playgroud)

您只需创建一个命名窗口并将其名称作为字符串传递给 imshow 即可。


Ahm*_*ssa 5

我遇到了必须创建任意数量的 openCV 窗口的问题。我将它们存储在一个列表中,并且不能简单地循环它来显示它们:

# images is a list of openCV image object

for img in images:
    cv2.imshow('image',i)
Run Code Online (Sandbox Code Playgroud)

由于图像需要不同的标签,这不起作用,因此此循环只会显示列表中的最后一项。

这可以通过使用迭代器和 python 字符串格式化程序来解决:

for i, img in enumerator(images):
    cv2.imshow("Image number {}".format(i), img)

Run Code Online (Sandbox Code Playgroud)

因此,现在所有图像都将显示,因为它们已被分配了不同的标签。