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
相关产品推荐
相关产品推荐

