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

使用OpenCV Haar级联人脸识别时遇cv::cvtColor报错求助

解决OpenCV Haar级联人脸识别中的cv::cvtColor断言错误

这个错误(-215:Assertion failed) !_src.empty()其实很好理解——你调用cv2.cvtColor的时候传入的frame是空的,也就是摄像头没有成功捕捉到画面。

看你的代码就能发现问题所在:你先执行了灰度转换操作,之后才判断ret==False要不要跳过。如果cap.read()失败(比如摄像头被占用、设备识别不了),ret会是False,frame就是空对象,这时候去转灰度图肯定会触发断言错误。

修正后的代码

import cv2

def videoCam():
    cap = cv2.VideoCapture(0)
    # 注意检查级联文件路径是否正确,如果文件不在当前脚本目录,要写绝对路径
    face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
    
    while True:
        ret, frame = cap.read()
        # 先判断是否成功读取帧,失败直接跳过当前循环
        if not ret:
            print("无法读取摄像头帧,跳过...")
            continue
        
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray_frame, 1.3, 5)
        
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
        
        cv2.imshow("Video Frame", frame)
        key_pressed = cv2.waitKey(1) & 0xff
        if key_pressed == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()

videoCam()

额外排查点

  • 如果你运行后还是有问题,先检查摄像头是否被其他程序占用(比如浏览器、视频会议软件),关掉占用的程序再试。
  • 确认haarcascade_frontalface_alt.xml文件的路径是否正确:如果这个文件不在你的Python脚本同一目录下,要写完整的绝对路径,比如cv2.CascadeClassifier("C:/opencv/data/haarcascades/haarcascade_frontalface_alt.xml")(根据你的实际路径调整)。
  • 有些设备的摄像头索引不是0,如果VideoCapture(0)不行,可以试试1、2这些索引值。

内容的提问来源于stack exchange,提问作者vinayak shivam Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:44:39