OpenCV 关闭特定键上的窗口?

Mah*_*00d 8 python opencv window image

这看起来很简单,但我无法让它工作,也找不到关于这个特定问题的任何问题(如果有,请在评论中指出)。

我正在显示图像并希望窗口在特定键上关闭,但奇怪的是,任何键都会导致它关闭

这是我用于测试的简单代码:

img = cv2.imread("MyImage.png")
cv2.imshow('My Image', img)
k = cv2.waitKey(0) & 0xFF
print(k)
if k == 27:  # close on ESC key
    cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

(基于这里所说的)

无论我按哪个键,都会显示键代码(ESC 为 27,SPACE 为 32,...)并且窗口关闭。

主要问题:if子句永远不会到达(我通过将其放入print(k)其中进行检查,但没有打印任何内容)。按下按键后,程序只是停止运行,并且不会检查按键代码。

(我使用的是 macOS Catalina,使用 Python 3.8)

那么,我该如何让它等待特定的键呢?

Han*_*rse 6

从我的角度来看,您的程序只是终止,因此无论您按哪个键,所有窗口都会隐式关闭。

while True一种想法可能是围绕读取和检查按下的键设置一个循环:

import cv2

img = cv2.imread('path/to/your/image.png')
cv2.imshow('My Image', img)
while True:
    k = cv2.waitKey(0) & 0xFF
    print(k)
    if k == 27:
        cv2.destroyAllWindows()
        break
Run Code Online (Sandbox Code Playgroud)

运行它,按一些键,最后ESC,我得到以下输出:

103
100
102
27
Run Code Online (Sandbox Code Playgroud)

此外,所有窗口均关闭,程序终止。

----------------------------------------
System information
----------------------------------------
Platform:     Windows-10-10.0.16299-SP0
Python:       3.8.5
OpenCV:       4.4.0
----------------------------------------
Run Code Online (Sandbox Code Playgroud)