我跟随 this program tutorial 捕获屏幕并将其放入视频文件中。当按下“q”按钮时,录音停止。但是,我不想在迷你窗口中显示屏幕而直接写入文件。我只是调用教程中显示的 while 循环,只是我没有包含关于将图像显示到“实时”窗口的部分。现在当我使用:
while True:
img = pyautogui.screenshot()
frame = np.array(img)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
out.write(np.array(frame))
# cv2.imshow('Live', frame)
if cv2.waitKey(1) == ord('q'):
print('done')
break
它不会检测到我按下的 q。这里发生了什么?当我按 q 时,循环应该停止吗?我只是得到一个 44 位 mp4 文件作为最终结果。我想这可能是因为我没有使用 imshow 所以 waitkey 不会做任何事情,但我不确定。有没有办法让它在按键时停止录制?
答案 0 :(得分:2)
除非有窗口,否则 waitKey()
很可能什么都不做,因为它很可能与窗口键事件处理程序有关。
如果您使用的是 Windows,您可以尝试 msvcrt.kbhit()
,这是一个非阻塞调用,用于请求是否已按下控制台上的某个键并可以读取该键。
在其他平台上,以非阻塞方式等待按键可能很重要。
答案 1 :(得分:2)
我认为,您的假设是正确的,因为您没有启动显示(即 cv2.imshow()),因此 cv2.watikey() 不起作用。由于您的目标是停止按键记录,我认为您可以遵循此 link's 建议。 或者试试这个模式:
try:
while True:
break
#replace break with your code
except KeyboardInterrupt:
print("Press Ctrl-C to terminate while statement")
pass