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

display multiple OpenCV imshow() windows separately

本文关键字:imshow 窗口 OpenCV 显示      更新时间:2023-10-16

我有一个使用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)
  1. callmoveWindow("第一个图像",img1,0,0)//窗口的默认位置在col,row==0,0。因此,这一行是可选的
  2. 调用imshow("第二个图像",img2)
  3. set firstImageWidth=img1的宽度
  4. 将mySpacing设置为40//更改此值以增大/减小图像窗口之间的间隙
  5. callmoveWindow("第一个图像",firstImageWidth+mySpacing,0)

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

  1. 设置myTime=7000//(以毫秒为单位)。这里,7000毫秒==7秒来显示我们的图像窗口
  2. 调用waitKey(myTime)
  3. 调用waitKey(1)//这是一个技巧。否则,窗口将无限期打开

目前,我正在使用带有OpenCV 4.2的Java SE8。以上方法对我有效。[上述示例的屏幕截图。][1][1] :https://i.stack.imgur.com/JaTI0.png

以下是显示部分的Java+OpenCV代码片段:


//显示图像。使用OpenCV HighGui类方法
字符串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);