C++ OpenCV destroyWindow()无法使用多个窗口
我正在使用openCV库打开和显示多个图像。为了显示每个图像,我创建了多个窗口。为了同时显示多个窗口,我仅在最后一张图像之后使用waitKey()C++ OpenCV destroyWindow()无法使用多个窗口,c++,opencv,C++,Opencv,我正在使用openCV库打开和显示多个图像。为了显示每个图像,我创建了多个窗口。为了同时显示多个窗口,我仅在最后一张图像之后使用waitKey() cv::namedWindow("Window1"); cv::imshow("Window1", myImage1); cv::namedWindow("Window2"); cv::imshow("Window2", myImage2); cv::waitKey(1
cv::namedWindow("Window1");
cv::imshow("Window1", myImage1);
cv::namedWindow("Window2");
cv::imshow("Window2", myImage2);
cv::waitKey(1000);
从代码中可以看出,我的目标是给用户1s的时间按下任何键,否则我想破坏其中一个窗口(就本问题而言,它可以是任意一个)。我想通过使用openCV的函数destronWindow()来实现这一点
下面是我的全部代码:
cv::namedWindow("Window1");
cv::imshow("Window1", myImage1);
cv::namedWindow("Window2");
cv::imshow("Window2", myImage2);
cv::waitKey(1000);
cv::destroyWindow("Window2");
此代码段的目标应该是,在用户不按任何键的情况下,如果经过1s,则只显示“Window1”。
然而,这并没有发生。最终结果是没有一个窗口被破坏
我已经测试了以下代码段,这导致两个窗口都被关闭:
cv::namedWindow("Window1");
cv::imshow("Window1", myImage1);
cv::namedWindow("Window2");
cv::imshow("Window2", myImage2);
cv::waitKey(1000);
cv::destroyWindow("Window1");
cv::destroyWindow("Window2");
当我使用destroyAllWindows()函数时也会得到同样的结果(这很有意义)
我现在的问题是,为什么我不能只销毁一个窗口?
其他信息:
- 使用Ubuntu 20.04
- OpenCV版本是4.2
- 在C工作++
- 更改要销毁的窗口的顺序不会改变任何内容
- 试图复制它,在Python和Ubuntu中都面临着这个问题。如果您仍然被卡住,您可以尝试一种权宜之计,通过将
waitKey
的结果存储在某个变量中,仅重新显示您想要显示的内容,前提是用户是否按下了某个键。如果为-1,则未按下任何键
我在Python提供了一个示例解决方案,不应该遇到转换为C++的任何困难。
import cv2
img1 = cv2.imread('img1.png')
img2 = cv2.imread('img2.png')
cv2.namedWindow('img1')
cv2.imshow('img1', img1)
cv2.namedWindow('img2')
cv2.imshow('img2', img2)
key = cv2.waitKey(5000)
if key == -1:
cv2.destroyAllWindows()
cv2.imshow('img1', img1)
cv2.waitKey(0)
else:
# do whatever destroy both or keep on showing both using cv2.waitKey(0)
cv2.destroyAllWindows()
我通过在添加每个窗口之前添加
startWindowThread()
找到了一个解决方案。
需要注意的一点是,我已经使用GTK选项构建了openCV,所以我的解决方案只在GTK上测试,而不是在其他平台上测试
startWindowThread()
仅与GTK一起使用,如下所述:-对于其他函数,函数为空。这是在循环中吗?while循环还是for循环?