我的程序使用以下代码生成一系列窗口:
def display(img, name, fun): global clicked cv.NamedWindow(name, 1) cv.ShowImage(name, img) cv.SetMouseCallback(name, fun, img) while cv.WaitKey(33) == -1: if clicked == 1: clicked = 0 cv.ShowImage(name, img) cv.DestroyWindow(name)
我在gui窗口中按“ q”将其关闭。但是,该代码将继续显示函数的下一个调用,并显示第二个gui窗口,而不会关闭第一个。我使用的是带有OpenCV 2.1的Mac,并在Terminal中运行该程序。如何关闭GUI窗口?谢谢。
OpenCV中的GUI有一些特殊之处。该destroyImage调用无法关闭窗口(至少在Linux下,默认后端是Gtk +直到2.1.0),除非waitKey调用该事件来泵送事件。之后添加一个waitKey(1)电话destroyWindow可能会起作用。
destroyImage
waitKey
waitKey(1)
destroyWindow
即使这样,也不能保证关闭。该waitKey函数仅在窗口具有焦点的情况下才会被拦截,因此,如果窗口在您调用时没有焦点destroyWindow,则它可能在下一次destroyWindow调用之前保持可见。
我假设这是源自Gtk +的行为;在Windows下使用该功能时,没有遇到任何麻烦。