Python 在<;模块>;灰色=cv2.CVT颜色(边框,cv2.COLOR\u bgr2灰色)?

Python 在<;模块>;灰色=cv2.CVT颜色(边框,cv2.COLOR\u bgr2灰色)?,python,opencv,cascade-classifier,Python,Opencv,Cascade Classifier,我正在尝试使用cv2制作一个汽车检测器/分类器。我从github下载了一个.xml文件: 当我运行我的代码时,我得到 Traceback (most recent call last): File "C:\Users\user1\Downloads\Stuff\Python\cascades\Car_classification.py", line 13, in <module> gray = cv2.cvtColor(frames, cv2.COL

我正在尝试使用
cv2
制作一个汽车检测器/分类器。我从github下载了一个
.xml
文件: 当我运行我的代码时,我得到

Traceback (most recent call last):

  File "C:\Users\user1\Downloads\Stuff\Python\cascades\Car_classification.py", line 13, in <module>
    gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)

error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
我的输入图像:

我的输出图像:


它是一辆汽车,但我不认为轮胎是一辆汽车!那么我做错了什么呢?

我不能肯定地说为什么你的分类对汽车没有任何帮助,因为我不知道你是从哪里来的。在不知道的情况下,我无法说它预计能够检测到什么样的图像。有可能是经过训练,它可以从更像这样的图像中识别汽车,或者更放大。在这种情况下,您的示例图像完全不同于经过训练要检测的图像。如果不知道更多,就不可能说

至于你收到的那个错误信息,我至少可以 解释一下


您正在以视频形式打开图像。在第一次通过循环时,它(令人惊讶地)能够读取图像数据,但在下一次通过之后,就没有更多的“帧”可读取,因此您的
frames
对象是
None
,其中没有图像数据。这意味着当您尝试将其转换为灰度时,操作失败。

您检查了吗?是的,但我不认为这是我需要的也许您需要提供“cars”文件的路径谢谢@buckley-w-david
import cv2
import numpy as np

cap = cv2.VideoCapture('car.jpg')

font = cv2.FONT_HERSHEY_TRIPLEX

harcascade = cv2.CascadeClassifier("cars.xml")

while True:
    ret,frames = cap.read()

    gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
    
    cars = harcascade.detectMultiScale(gray, 1.1 , 2)
    
    for (x,y,w,h) in cars:
        cv2.rectangle(frames,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.putText(frames,str("Car"),(x,y+h),font,1,255)
     
    
    cv2.imshow('img',frames)   

     
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    
    
cap.release()
cv2.destroyAllWindows()
cap = cv2.VideoCapture('car.jpg')