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

时间:2014-10-19 16:09:57

标签: c++ visual-studio-2010 opencv

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

2 个答案:

答案 0 :(得分:3)

以编程方式进行此操作的方法是致电resizeWindow()来定义每个窗口的尺寸,并moveWindow()将它们放置在屏幕的特定位置。

void cv::resizeWindow(const string& winname, int width, int height)
void cv::moveWindow(const string& winname, int x, int y)

答案 1 :(得分:0)

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

示例步骤:-

  1. 呼叫 imshow(“第一张图片”,img1)

  2. 调用 moveWindow(“第一张图片”,img1,0,0) // 窗口的默认位置为col,row == 0,0。因此,此行是可选的。

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

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

  1. 设置 myTime = 7000 //毫秒。在这里,7000毫秒== 7秒钟来显示我们的图像窗口。
  2. 致电 waitKey(myTime)
  3. 致电 waitKey(1) //这是一个技巧。否则,窗户会无限期打开。

目前,我正在将Java SE8与OpenCV 4.2一起使用。上面的方法对我有用。 Screenshot of the above example in action. 这是显示部分的Java + OpenCV代码段:

...
//显示图片。使用OpenCV HighGui类方法。
String inputWindowName =“此窗口显示输入图像”;
String 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);