You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的OpenCV和keyboard库时摄像头无法正常工作怎么办

问题核心原因

  • OpenCV的HighGUI模块依赖内置的事件循环才能完成窗口渲染、帧更新操作。你之前使用的cv2.waitKey()本质上不仅是等待按键,还会主动处理HighGUI的所有待处理事件(包括窗口重绘、帧刷新),所以能正常显示画面。去掉waitKey()之后,事件队列没有被消费,cv2.imshow()的内容根本不会被渲染到窗口上,看起来就是摄像头无法工作。
  • 其次keyboard.read_key()是阻塞方法,执行到这行的时候会一直卡住等待用户按键,导致循环没法持续读取摄像头帧、更新画面,也会导致画面卡住。

可行修改方案

你可以保留事件循环处理逻辑,同时用非阻塞的键盘检测逻辑,不需要用waitKey()做按键判断即可:

import cv2
import keyboard
webcam = cv2.VideoCapture(0)
while True:
    ret, frame = webcam.read()
    if not ret: # 增加帧读取异常判断,避免摄像头读取失败时报错
        break
    cv2.imshow("webcam", frame)
    # 仅调用waitKey处理事件,等待1毫秒即可,不用于按键判断
    cv2.waitKey(1)
    # 用keyboard的非阻塞检测方法判断esc是否按下
    if keyboard.is_pressed('esc'):
        break
cv2.destroyAllWindows()
webcam.release()

注意:如果在Linux/macOS环境下运行,keyboard库需要root权限才能正常检测按键,否则会出现按键无响应的问题。

内容的提问来源于stack exchange,提问作者adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:06:04