微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误:(-215:Assertion failed) !empty() 在函数 'cv::CascadeClassifier::detectMultiScale'

如何解决错误:(-215:Assertion failed) !empty() 在函数 'cv::CascadeClassifier::detectMultiScale'

我正在尝试使用 python 的“Open-CV”进行人脸检测。该程序向我抛出了一个错误,我作为 Python 初学者无法理解。 程序错误

Traceback (most recent call last):
  File "c:\Users\(User's name)\Documents\Python\Face-dection\Facedectection.py",line 6,in <module>
    gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wvn_it83\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion Failed) !_src.empty() in function 'cv::cvtColor' 

代码

import cv2

face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

img = cv2.imread("photo.jpg")
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

faces=face_cascade.detectMultiScale(gray_img,scaleFactor=1.05,minNeighbors=5)

for x,y,w,h in faces:
    img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)

resized=cv2.resize(img,(int(img.shape[1]/3)),(int(img.shape[0]/3)))

cv2.imshow("Deteced-face",resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:照片和.xml文件放在同一个文件

解决方法

您需要在引用 cv2.data.haarcascades 文件之前添加 .xml

#[...]

face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") #Note the change

#[...]

你的代码还有一个问题,看看这段代码:

resized=cv2.resize(img,(int(img.shape[1]/3)),(int(img.shape[0]/3)))

你应该传递一个图像,它是新的宽度和高度(以元组格式)作为参数 但是您将图像以及宽度和高度作为单独的整数传递而不是在 元组格式。

它应该是这样的:

resized=cv2.resize(img,(int(img.shape[1]/3),int(img.shape[0]/3))) 
'''
Notice I have removed an extra bracket after
cv2.resize(img,(int(img.shape[1]/3)) -> cv2.resize(img,(int(img.shape[1]/3)...
and also I have removed an extra bracket before
(int(img.shape[0]/3))) -> int(img.shape[0]/3)))
'''

这应该有效:

import cv2

face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") #Note the change

img = cv2.imread("photo.jpg")
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

faces=face_cascade.detectMultiScale(gray_img,scaleFactor=1.05,minNeighbors=5)

for x,y,w,h in faces:
    img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)

resized=cv2.resize(img,int(img.shape[0]/3))) 

cv2.imshow("Deteced-face",resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。