既然有新建窗口,就会有销毁窗口。在OpenCV中,销毁窗口时窗口也将自动关闭,可以通过函数destroyWindow和destroyAllWindows来实现,前者是销毁某一个指定名称的窗口,后者是销毁所有新建的窗口。函数destroyWindow声明如下:
destroyWindow(winname) → None
参数winname是要销毁窗口的名称。
destroyAllWindow函数更加简单,声明如下:
destroyAllWindows() → None
下面我们来新建3个窗口,每个窗口显示5秒,再分别销毁。
【例3.7】 销毁3个窗口
import cv2 as cv import numpy as np #导入numpy模块 szName = ["", "", ""] srcImage=[1,2,3] for i in range(0,2): szName[i] = ( "%d.jpg") % (i+1) srcImage[i] = cv.imread(szName[i]); #读取图片文件 cv.imshow(szName[i], srcImage[i]);#在“窗口1”中输出图片 cv.waitKey(5000);#等待5秒,程序自动退出;改为0,不自动退出 cv.destroyWindow(szName[i]); print("所有的窗口已经销毁了") cv.waitKey(0);
在上述代码中,我们在for循环中读取图片文件,然后新建窗口,并在窗口中显示图片5秒钟后销毁窗口。如果不想在for里面调用destroyWindow函数,也可以在for循环外面调用destroyAllWindows函数,这样3个窗口都显示后再一起销毁。
运行工程,结果如图3-8所示。
图3-8
窗口大小可以通过手动拖拉窗口边框来调整,也可以通过函数方式来调整窗口大小。调整窗口大小的函数是resizeWindow,声明如下:
resizeWindow(winname, width, height) → None
其中,参数winname是要调整尺寸的窗口的标题;width是调整后的窗口宽度;height是调整后的窗口高度。
需要注意的是,新建窗口函数namedWindow的第二个参数必须为WINDOW_NORMAL,才可以手动拉动窗口边框来调整大小,虽然此时resizeWindow依旧可以调整窗口,但是图片不会随着窗口大小而改变。
【例3.8】 调整窗口大小
import cv2 as cv srcImage=[1] width = 240 height = 120 szName = ( "%d.jpg") % 1 srcImage[0] = cv.imread(szName); cv.namedWindow(szName, cv.WINDOW_NORMAL); #新建窗口 cv.imshow(szName, srcImage[0]);#在窗口中显示图片 cv.resizeWindow(szName, width, height); #调整窗口大小 cv.waitKey(0);
在上述代码中,首先读入一幅图片,然后新建一个窗口显示图片,接着调用函数resizeWindow调整窗口大小,由于namedWindow的第二个参数是WINDOW_NORMAL,因此图片大小会随着窗口大小的变换而变化。
运行工程,结果如图3-9所示。
图3-9