【发布时间】: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