分别显示多个OpenCV imshow()窗口

问题描述 投票:1回答:2

我有一个使用opencv库构建的VS控制台应用程序。我正在使用opencv imshow函数显示图像。事实是,所有显示窗口都相互重叠,很难在它们之间切换。如何防止重叠并单独显示并在它们之间切换

c++ visual-studio-2010 opencv
2个回答
3
投票

以编程方式进行此操作的方法是,调用resizeWindow()定义每个窗口的大小,并调用resizeWindow()将它们放置在屏幕上的特定位置。

moveWindow()

0
投票

尽管这是一个较晚的答复,但您可能会发现在每次imshow()调用之后调用moveWindow()很有用。这里给出了一个与语言无关的解决方案。

示例步骤:-

  1. 通话imshow(“第一张图片”,img1)

  2. call moveWindow(“ first image”,img1,0,0) // 窗口的默认位置在col,row == 0,0。因此,此行是可选的。

  3. 通话imshow(“第二张图片”,img2)
  4. 设置firstImageWidth = img1的宽度
  5. set mySpacing = 40 //改变此值以增加/减小图像窗口之间的间隙。
  6. 调用moveWindow(“第一张图片”,img1,firstImageWidth + mySpacing,0)

然后,添加这些行以防止输出窗口永远处于活动状态。

  1. set myTime = 7000 //以毫秒为单位。在这里,7000毫秒== 7秒钟来显示我们的图像窗口。
  2. 通话waitKey(myTime)
  3. call waitKey(1) //这是一个把戏。否则,窗口将无限期打开。

目前,我将Java SE8与OpenCV 4.2一起使用。上面的方法对我有用。moveWindow()这是显示部分的Java + OpenCV代码段:

...//显示图片。使用OpenCV HighGui类方法。String inputWindowName =“此窗口显示输入图像”;字符串outputWindowName =“此窗口显示输出图像”;

HighGui displayWindow = new HighGui();

displayWindow.imshow(inputWindowName,img1);

displayWindow.imshow(outputWindowName,img2);displayWindow.moveWindow(outputWindowName,img1.cols()+ 40,0);

displayWindow.waitKey(7000);displayWindow.waitKey(1);

© www.soinside.com 2019 - 2024. All rights reserved.