繁体   English   中英

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

[英]display multiple OpenCV imshow() windows separately

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

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

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

虽然这是一个迟到的回复,但您可能会发现在每次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。 上面的方法对我有用。 上面示例的屏幕截图。 这是显示部分的 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM