最小化OpenCV HighGUI窗口

时间:2017-08-02 18:54:05

标签: python python-3.x opencv debian raspbian

我看到可以使用OpenCV调整窗口大小,例如:

import cv2
img = cv2.imread('Test.jpg')
cv2.imshow('image',img)
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 600,600)
cv2.waitKey(0)
cv2.destroyAllWindows()

但是可以最小化当前窗口吗?

我认为这可能是cv2.setWindowProperty()这个功能,例如这里是全屏

cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow("window", img)

2 个答案:

答案 0 :(得分:2)

嗯,openCV官方文档中没有自动最小化窗口的函数/方法。您可以尝试使用python的不同方法来完成任务。这种方法可以在这里找到:Is there a way to minimize a window in Windows 7 via Python 3?

虽然我也在这里张贴以供完整参考:

要最小化窗口,您需要知道窗口的标题或窗口类。当确切的窗口标题未知时,窗口类很有用。例如,以下脚本显示了两种不同的方法来最小化Microsoft Windows记事本应用程序,假设:

import ctypes

notepad_handle = ctypes.windll.user32.FindWindowW(None, "Untitled - Notepad")
ctypes.windll.user32.ShowWindow(notepad_handle, 6)

notepad_handle = ctypes.windll.user32.FindWindowW(u"Notepad", None) 
ctypes.windll.user32.ShowWindow(notepad_handle, 6)

要确定要使用的类名,您需要使用Microsoft的Spy ++等工具。显然,如果用一个文件打开记事本,它将有一个不同的标题,如test.txt - 记事本。如果是这种情况,第一个例子现在将无法找到窗口,但第二个例子仍然可以工作。

如果两个记事本副本正在运行,那么只有一个会被关闭。如果需要关闭所有副本,则需要枚举所有需要更多代码的窗口。

ShowWindow命令也可用于恢复窗口。

答案 1 :(得分:0)

也许这段代码可以帮助你,我用它来检测鼠标事件,以便在我点击它时最大限度地减少opencv GUI,显然,你可以创建另一个更有趣的应用程序:

import cv2
import numpy as np
import win32gui,win32con

a = np.zeros((200,200,3),np.uint8)

def tactil_sec(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.imshow("LOL",a)
        Minimize = win32gui.GetForegroundWindow()
        win32gui.ShowWindow(Minimize, win32con.SW_MINIMIZE)

cv2.namedWindow('LOL')
cv2.setMouseCallback('LOL',tactil_sec)

while 1:
    cv2.imshow("LOL",a)
    if (cv2.waitKey(20) & 0xFF == 27):
        break

cv2.destroyAllWindows()