如何解决OpenCV关闭特定键上的窗口?
这看起来确实很简单,但是我无法使其正常工作,也找不到与该特定问题有关的任何问题(如果有,请在评论中指出)。
我正在显示图像,并希望通过特定键关闭窗口,但是奇怪的是,任何键都会导致其关闭。
这是我测试的简单代码:
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)
无论我按什么键,都会显示键码(ESC键为27,空格键为...,),并且窗口关闭。
主要问题:从未达到if
子句(我通过将print(k)
放在其中进行检查,未打印任何内容)。按下按键后,该程序仅停止运行,并且无需检查按键代码。
(我在使用3.8的macOS Catalina上)
那么,我如何真正让它等待特定的键?
解决方法
从我的角度来看,您的程序只是终止了,因此所有窗口都隐式关闭,无论您按哪个键。
一个想法可能是在阅读和检查按下的按键周围放置一个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
----------------------------------------
,
尝试此操作,它将等待按键“ q”被按下。
import cv2
img = cv2.imread("MyImage.png")
cv2.imshow('My Image',img)
if cv2.waitKey(0) & 0xFF == ord('q'):
cv2.destroyAllWindows()
HIH。
,只需执行以下操作:
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
进行应用和操作。
如果你想使用特定的键,你可以使用ord()
:
img = cv2.imread('path/to/your/image.png')
cv2.imshow('My Image',img)
while True:
k = cv2.waitKey(0) & 0xFF
print(k)
if k == ord('c'): # you can put any key here
cv2.destroyAllWindows()
break
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。