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

OpenCV运行haarcascade车辆检测时cvtColor报!_src.empty()错误如何解决

错误原因

这个(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'报错的本质是调用颜色转换函数时传入的图像为空。
代码里cap.read()会返回两个值:第一个ret是布尔值,代表是否成功读到帧;第二个img是读到的帧内容。当视频读取完毕、视频路径错误无法打开时,ret会返回False,此时img是空值,直接传入cv2.cvtColor就会触发报错。另外如果级联分类器的xml文件路径错误,也可能导致后续逻辑异常。

修复代码
import numpy as np
import cv2

# 校验分类器是否加载成功
car_cascade = cv2.CascadeClassifier('haarcascade_car.xml')
if car_cascade.empty():
    print("分类器加载失败,请检查haarcascade_car.xml文件路径")
    exit()

# 校验视频是否成功打开
cap = cv2.VideoCapture(r"D:\Documents\KY7\Oracle\baocao\car_detector_haarcascades\cars.mp4")
if not cap.isOpened():
    print("视频加载失败,请检查文件路径或文件完整性")
    exit()

while cap.isOpened():
    ret, img = cap.read()
    # 读不到帧时直接退出循环
    if not ret:
        break
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cars = car_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in cars:
        cv2.rectangle(img,(x,y),(x+w+5,y+h+5),(0,0,255),3)

    cv2.imshow('Car Detector',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()
补充说明

如果运行后提示分类器或视频加载失败:

  • 把haarcascade_car.xml的相对路径替换为绝对路径
  • 确认视频文件可以正常使用本地播放器打开,无损坏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:04