import cv2 as cv
img=cv.imread('photo/goku3.jpg')
cv.imshow('image', img)
gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
haar_cascade=cv.CascadeClassifier('faces.xml')
faces_rect=haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbours=3)
print(f"Number of faces found = {len(faces_rect)}")
for (x,y,w,h) in faces_rect:
cv.rectangle(img, (x,y), (x+w,y+h), (0,255,0), thickness=2)
cv.imshow('detected face', img)
cv.waitKey(0)
Traceback (most recent call last):
File "e:\imageRecognitionProj\faceDetect.py", line 9, in <module>
faces_rect=haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbours=3)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'detectMultiScale'
> Overload resolution failed:
> - 'minNeighbours' is an invalid keyword argument for CascadeClassifier.detectMultiScale()
> - 'minNeighbours' is an invalid keyword argument for CascadeClassifier.detectMultiScale()
在 haar_cascade 变量中,我用 xml 文件定义了 cascadeClassifier()
我认为函数 detectMultiScale() 不可用。我试图重新安装 open-cv 但它没有用。
问题只是拼写错误:
将
minNeighbours=3
替换为 minNeighbors=3
.
错误消息意味着没有版本的
detectMultiScale()
方法具有名为 minNeighbours
的参数(但该方法存在其他名称的参数)。
关于
detectMultiScale()
的可用性:
确保您没有与我有冲突的包 -
opencv-python-headless
和 opencv-python
,但只安装了 opencv-contrib-python
包。pip install opencv-contrib-python
.找不到
faces.xml
,用haarcascade_frontalface_default.xml
代替。
代码示例:
import cv2 as cv
img=cv.imread('photo/goku3.jpg')
cv.imshow('image', img)
gray=cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
#haar_cascade=cv.CascadeClassifier('faces.xml')
haar_cascade=cv.CascadeClassifier(cv.data.haarcascades + "haarcascade_frontalface_default.xml") #https://stackoverflow.com/a/59717885/4926757
#faces_rect=haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbours=3)
faces_rect=haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3)
print(f"Number of faces found = {len(faces_rect)}")
for (x,y,w,h) in faces_rect:
cv.rectangle(img, (x,y), (x+w,y+h), (0,255,0), thickness=2)
cv.imshow('detected face', img)
cv.waitKey(0)
img
(示例):