Python OpenCV匿名/保证唯一窗口

Python OpenCV匿名/保证唯一窗口,python,opencv,Python,Opencv,OpenCV非常新,因此请耐心听我说: 我需要为用户输入打开一个临时窗口,但我需要确保它不会覆盖以前打开的窗口 有没有办法打开一个匿名窗口,或者以某种方式创建一个保证唯一的窗口名 显然,一个长的随机字符串是相当安全的,但这似乎是一个黑客 另外,我目前正在使用python绑定,但是如果您想用c/c++编写响应,我对它们很熟悉。在modules/highgui/src/window\u w32.cpp中(或者在其他文件中,如果您不使用windows,请查看void cv::namedWindow(c

OpenCV非常新,因此请耐心听我说:

我需要为用户输入打开一个临时窗口,但我需要确保它不会覆盖以前打开的窗口

有没有办法打开一个匿名窗口,或者以某种方式创建一个保证唯一的窗口名

显然,一个长的随机字符串是相当安全的,但这似乎是一个黑客


另外,我目前正在使用python绑定,但是如果您想用c/c++编写响应,我对它们很熟悉。

modules/highgui/src/window\u w32.cpp
中(或者在其他文件中,如果您不使用windows,请查看
void cv::namedWindow(const string&winname,int标志)
…src/window.cpp
中有一个函数
静态CvWindow*icvFindWindowByName(const char*name)
,这可能是您需要的,但它是内部的,所以OpenCV的作者出于某种原因不希望其他人使用它(或者不知道有人可能需要它)

我认为最好的选择是使用系统api查找是否存在具有特定名称的窗口。

最终使用一些几乎不可能成为窗口名的东西,例如ms中的当前时间+用户名+随机数+随机字符串(是的,我知道窗口名“234564312cyriel123234123dgbdfbddfgb#$%grw$”并不漂亮)。

我自己想出了一个可能的解决方案:

围绕imshow和namedWindow的几个简单包装器允许在全局变量中记录所有当前窗口名的列表

window_list = []
def new_window(name=None):
    if name == None:
        i=0
        while str(i) in window_list:
            i = i+1
        name = str(i)
    if name not in window_list:
        window_list.append(name)
    cv2.namedWindow(name)        #always create the window, in case it's been manually closed
                                 #does nothing if window is already open
    return name

def img_show(img, name=None):
    name = new_window(name)
    cv2.imshow(name, img)
    return name
不带名称调用img_show将提供一个增量默认名称


这与IDL中的行为大致相似。显然,这不是最健壮的解决方案,要求所有代码都使用这些包装器,但目前它可以满足我的需要。

Hi,我不确定是否遵循。是什么阻止您为窗口指定不同的名称(即
imshow(“window1”,mat1);imshow(“tempWindow”,mat2)
)?你能澄清一下吗?这是一个库函数。如果某个客户端代码已经有一个名为“tempWindow”的窗口,会发生什么?我明白了。我不认为OpenCV本身通过其简单的GUI功能提供了这一功能,您可能需要自己使用某种“黑客”(如您所说的随机字符串,或者让客户端代码提供名称作为参数等)