【问题标题】:Minimize OpenCV HighGUI Window最小化 OpenCV HighGUI 窗口
【发布时间】:2018-05-08 15:23:35
【问题描述】:

我看到可以使用 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()this 函数,例如这里是全屏的

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

【问题讨论】:

  • @DanMašek 我认为这不是重复的,因为我需要这个用于 openCV。重复的问题不是要求 openCV 功能。
  • @DanMašek 你知道 linux 或 Windows 的任何答案吗?
  • 问题是,据我所知,OpenCV 并没有公开这个功能,所以如果有什么办法,你必须为 GUI 后端寻找一些通用的方法用过的。使用 tkinter 之类的东西编写自己的简单 GUI 可能会更容易,这将为您提供更大的灵活性。 |这可能是添加到 OpenCV 的一个有用功能——你为什么不尝试在他们的 issue tracker 中建议这样的功能

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


【解决方案1】:

好吧,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 命令也可以用来恢复窗口。

【讨论】:

  • 如果您使用您提到的内容扩展 OP 的脚本,这个答案会更好,以便有一个完整的示例来演示该功能。现在,您并没有真正对您所指的原始答案中所说的内容添加太多内容。
  • 感谢指点。我想我应该只写 sn-p 并重定向用户。编辑:)
  • 谢谢,但这是针对 Windows 的。我需要在 raspbian / Debian OS 上运行的 Raspberry Pi
  • 那么你的问题需要精确才能得到准确的答案:)
  • @RifatBinReza 我现在为此添加标签
【解决方案2】:

也许这段代码会对你有所帮助,我用它来检测鼠标事件以在我点击它时最小化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() 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 2011-05-27
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多