有没有办法在不显示窗口的情况下使用 cv2.waitkey()?

时间:2021-03-08 06:30:06

标签: python opencv cv2

我跟随 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 不会做任何事情,但我不确定。有没有办法让它在按键时停止录制?

2 个答案:

答案 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