我有一个使用opencv库构建的VS控制台应用程序。我正在使用opencv imshow函数显示图像。事实是,所有显示窗口都相互重叠,很难在它们之间切换。如何防止重叠并单独显示并在它们之间切换
以编程方式进行此操作的方法是,调用resizeWindow()
定义每个窗口的大小,并调用resizeWindow()
将它们放置在屏幕上的特定位置。
moveWindow()
尽管这是一个较晚的答复,但您可能会发现在每次imshow()调用之后调用moveWindow()很有用。这里给出了一个与语言无关的解决方案。
示例步骤:-
通话imshow(“第一张图片”,img1)
call moveWindow(“ first image”,img1,0,0) // 窗口的默认位置在col,row == 0,0。因此,此行是可选的。
- 通话imshow(“第二张图片”,img2)
- 设置firstImageWidth = img1的宽度
- set mySpacing = 40 //改变此值以增加/减小图像窗口之间的间隙。
- 调用moveWindow(“第一张图片”,img1,firstImageWidth + mySpacing,0)
然后,添加这些行以防止输出窗口永远处于活动状态。
- set myTime = 7000 //以毫秒为单位。在这里,7000毫秒== 7秒钟来显示我们的图像窗口。
- 通话waitKey(myTime)
- 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);