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

Python使用OpenCV编写安防摄像头程序运行窗口闪退报错如何解决

问题原因

你的代码存在缩进错误,cap.release() 和 cv2.destroyAllWindows() 被错误放在了while True循环内部:

  • 程序第一次进入循环,执行完画面展示逻辑后就会直接释放摄像头资源、销毁所有窗口
  • 第二次循环执行cap.read()时,摄像头已经被释放,无法读取到有效帧数据,frame为空,触发!_src.empty()的断言报错

修复后的参考代码

import cv2
import time
import datetime

# 初始化摄像头
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 先判断摄像头是否成功打开
if not cap.isOpened():
    print("摄像头打开失败,请检查设备是否被其他程序占用")
    exit()

while True:
    ret, frame = cap.read()
    # 增加帧读取失败的判断逻辑,避免程序崩溃
    if not ret:
        print("无法读取帧数据,退出程序")
        break

    cv2.imshow("Security Camera", frame)

    # 按q键退出程序
    if cv2.waitKey(1) == ord('q'):
        break
    
# 释放资源的逻辑要放在循环外,只有退出循环后才执行
cap.release()
cv2.destroyAllWindows()

其他排查方向

如果调整缩进后仍有报错,可以尝试以下操作:

  • 检查摄像头是否被其他软件(系统相机、微信、腾讯会议等)占用,关闭占用程序后重试
  • 尝试更换cv2.VideoCapture的设备编号,比如把0改成1、2测试
  • 移除cv2.CAP_DSHOW参数,直接使用cv2.VideoCapture(0)测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:45:04