打开CV以关闭特定键上的窗口?

2024-04-28 17:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这是我的简单测试代码:

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()

(根据所说的here

无论我按哪个键,都会显示键代码(27表示ESC,32表示空格…),窗口关闭

主要问题:从未到达if子句(我将print(k)放入其中进行检查,但没有打印任何内容)。按键后,程序停止运行,无法检查按键代码

(我在macOS Catalina上,使用Python 3.8)

那么,我如何让它等待一个特定的键呢


Tags: 代码图像imgifpngmy评论cv2
3条回答

尝试此操作,它将等待按下“q”键

import cv2

img = cv2.imread("MyImage.png")
cv2.imshow('My Image', img)
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv2.destroyAllWindows()

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

一个想法可能是在读取和检查按下的键时放置一个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

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

103
100
102
27

同时,所有窗口都关闭,程序终止

----------------------------------------
System information
----------------------------------------
Platform:     Windows-10-10.0.16299-SP0
Python:       3.8.5
OpenCV:       4.4.0
----------------------------------------

只需这样做:

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

我只是从中删除了& 0xFF。这对我来说是可行的,但我不知道为什么这会造成问题,因为它只是简单地应用和操作FF

相关问题 更多 >