小编典典

使用Python和OpenCV在Mac上,DestroyWindow不会关闭窗口

python

我的程序使用以下代码生成一系列窗口:

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窗口?谢谢。


阅读 374

收藏
2020-12-20

共1个答案

小编典典

OpenCV中的GUI有一些特殊之处。该destroyImage调用无法关闭窗口(至少在Linux下,默认后端是Gtk
+直到2.1.0),除非waitKey调用该事件来泵送事件。之后添加一个waitKey(1)电话destroyWindow可能会起作用。

即使这样,也不能保证关闭。该waitKey函数仅在窗口具有焦点的情况下才会被拦截,因此,如果窗口在您调用时没有焦点destroyWindow,则它可能在下一次destroyWindow调用之前保持可见。

我假设这是源自Gtk +的行为;在Windows下使用该功能时,没有遇到任何麻烦。

2020-12-20