【问题标题】:error: (-215:Assertion failed) !empty() in function CV2 Error错误:(-215:断言失败)!函数CV2错误中的empty()
【发布时间】:2022-10-15 03:11:57
【问题描述】:

我正在用python制作一个程序,它只在汽车周围绘制一个矩形。我目前一直在获取汽车的坐标,这是代码:

#################################################
import cv2
#################################################
car_data = cv2.CascadeClassifier(cv2.data.haarcascades + "cars.xml")
img = cv2.imread("car_front.jpeg")
#################################################
img_but_bnw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

car_coordinates = car_data.detectMultiScale(img_but_bnw)
print(car_coordinates)

#################################################
cv2.imshow("Detect Everything", img_but_bnw)
cv2.waitKey()
print("Code Completed")
#################################################

我遇到了函数“cv2.detectMultiScale”的错误。 错误:

File "e:\Python2\Body_Detection.py", line 11, in <module>
    car_coordinates = car_data.detectMultiScale(img_but_bnw)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'

我试过谷歌搜索,它说使用cv2.CascadeClassifier(cv2.data.haarcascades + "cars.xml") 而不是cv2.CascadeClassifier("cars.xml")。它没有用:(,任何帮助将不胜感激。

【问题讨论】:

  • 每隔一天都会问这个问题。请使用搜索功能。
  • 也许首先使用print()(和print(type(...))print(len(...)) 等)来查看代码的哪一部分被执行以及你在变量中真正拥有什么。它被称为"print debuging",它有助于查看代码真正在做什么。
  • OpenCV 在无法读取文件时不会引发错误,但稍后在您尝试使用文件时会显示问题。您应该首先检查您是否从.xml.jpg 获取数据,因为它们可能为空。 IE。图片可能需要使用/full/path/to/image.jpg。您还可以检查cv2.data.haarcascades + "cars.xml" 是否真的存在于磁盘上。见print( os.listdir(cv2.data.haarcascades) )
  • 我在我的电脑上检查了print( os.listdir(cv2.data.haarcascades) ),没有cars.xml。如果它是您的文件,那么最好使用/full/path/to.cars.xml,因为代码可能从不同的文件夹运行,并且可能在您的文件夹中找不到该文件。
  • 如果我使用了这个 cv2.CascadeClassifier("cars.xml"),你的代码就可以工作。但在您的情况下,文件名不在当前目录中,或者可能拼写错误的文件名或扩展名。

标签: python opencv computer-vision vision


【解决方案1】:

文件cars.xml 不是opencv 库的一部分,尽管您可以在互联网上找到使用此文件名的教程。 cv2.data.haarcascades 所寻址的文件夹包括用于眼睛和面部检测之类的 xml 示例(当前内容参见 https://github.com/opencv/opencv/tree/4.x/data/haarcascades)。

您可以搜索其他作者的现有cars.xml 示例并将其复制到您的项目文件夹中。然后只使用"cars.xml" 而不使用cv2.data.haarcascades

例如。我发现了这个项目Vehicle Detection with Haar Cascades,其中包含一个文件cars.xml,它可以很好地与您上面的代码一起使用。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2021-11-18
    • 2020-02-03
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多