我有一个使用opencv库构建的VS控制台应用程序。我正在使用opencv imshow函数显示图像。问题是所有的imshow窗口都相互重叠,很难在它们之间切换。如何防止重叠并单独显示它们并在它们之间切换
答案 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()很有用。此处提供了与语言无关的解决方案。
示例步骤:-
呼叫 imshow(“第一张图片”,img1)
调用 moveWindow(“第一张图片”,img1,0,0) // 窗口的默认位置为col,row == 0,0。因此,此行是可选的。
- 致电 imshow(“第二张图片”,img2)
- 设置firstImageWidth = img1的宽度
- set mySpacing = 40 //改变此值以增加/减小图像窗口之间的间隙。
- 调用 moveWindow(“第一张图片”,img1,firstImageWidth + mySpacing,0)
然后,添加以下行,以防止输出窗口永远处于活动状态。
- 设置 myTime = 7000 //毫秒。在这里,7000毫秒== 7秒钟来显示我们的图像窗口。
- 致电 waitKey(myTime)
- 致电 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);