OpenCV中CascadeClassifier Bad Argument错误排查求助
OpenCV CascadeClassifier构造函数参数错误:无法将对象转换为字符串文件名
我用Python 3.9开发OpenCV项目时,在car_tracker变量定义行报错,注释该行后程序能正常运行,但不清楚错误原因。
报错信息
Traceback (most recent call last):
File "C:\Users\XXXX\Desktop\Car_Automation\Car_Automation.py", line 18, in
car_tracker = cv2.CascadeClassifier(trained_car_data)
cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'CascadeClassifier'
Overload resolution failed:
- Can't convert object to 'str' for 'filename'
相关代码
import cv2 #Our pre-trained car classifier pedestrian_tracker = cv2.CascadeClassifier('haarcascade_fullbody.xml') trained_car_data = cv2.CascadeClassifier('car_detector.xml') # create opencv image img = cv2.imread('car.jpg') #convert to grayscale black_n_white = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Create car classifier car_tracker = cv2.CascadeClassifier(trained_car_data) #Error happens on this line #detect cars cars = trained_car_data.detectMultiScale(black_n_white) print(cars) #Display the image with the faces spotted cv2.imshow('Car Detector', black_n_white) #Don't autoclose Wait here in the code and listen for a key press) cv2.waitKey() print("Code Completed")
错误原因
trained_car_data已经是CascadeClassifier的实例对象,但你错误地将它传入了CascadeClassifier的构造函数——这个构造函数要求传入字符串类型的模型文件路径,而非已实例化的对象,因此触发了类型转换失败的错误。
解决方案
- 若无需额外的分类器实例,直接删除报错的
car_tracker = cv2.CascadeClassifier(trained_car_data)这一行即可,因为你已经通过trained_car_data完成了车型检测模型的加载,后续代码也在正常使用它进行检测。 - 若确实需要创建另一个分类器实例,需传入模型文件路径字符串,示例:
car_tracker = cv2.CascadeClassifier('car_detector.xml')
内容的提问来源于stack exchange,提问作者Matt Dolly
相关产品推荐
相关产品推荐

