我正在尝试使用函数 detectMultiScale() 但它显示错误参数错误

问题描述 投票:0回答:1
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 但它没有用。

python opencv face-detection
1个回答
0
投票

问题只是拼写错误:

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
(示例):

© www.soinside.com 2019 - 2024. All rights reserved.