Для 'detectMultiScale' требуется объект 'cv2.CascadeClassifier', но он получил 'numpy.ndarray' - PullRequest
0 голосов
/ 06 октября 2019

Я новичок в opencv и пытаюсь определить лицо на изображении, однако у меня возникают проблемы с этой строкой кода

faces = cv2.CascadeClassifier.detectMultiScale(gray_img, scaleFactor=1.05, minNeighbors=5, minSize=(1,1))

Я получаю эту ошибку

TypeError: descriptor 'detectMultiScale' requires a 'cv2.CascadeClassifier' object but received a 'numpy.ndarray'

Я попытался провести исследование этой ошибки, но, похоже, ничего не говорит мне, почему это происходит и как это исправить. полный код

import cv2

img = cv2.imread("C:\\Users\\Astroid\\Desktop\\.py pics\\pic.jpg")

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faceCascade = cv2.CascadeClassifier('C:\\Users\\Astroid\\AppData\\Local\\Programs\\Python\\Python37-32\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')

faces = faceCascade.detectMultiScale(
        gray_img,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(10, 10)
        flags=cv2.CASCADE_SCALE_IMAGE
    )

print(type(faces))
print(faces)

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

cv2.imshow("pic", img)

cv2.waitKey(0)

cv2.destroyAllWindows()

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

так что после всего этого я немного подправил код и, честно говоря, понятия не имею, что случилось, но вот последний рабочий код.

import cv2

img = cv2.imread("C:\\Users\\Astroid\\Desktop\\.py pics\\image.png")

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faceCascade =  
cv2.CascadeClassifier('C:\\Users\\Astroid\\AppData\\Local\\Programs\\Python\\Python37-32\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')

faces = faceCascade.detectMultiScale(
    gray_img,
    scaleFactor=1.1,
    minNeighbors=5,
)

print(type(faces))
print(faces)

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

cv2.imshow("image", img)

cv2.waitKey(0)

cv2.destroyAllWindows()
0 голосов
/ 06 октября 2019

Если я не ошибаюсь, я полагаю, вы не упомянули CascadeClassifier в своем коде. например,

# Classifier you want to use
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

...
...

faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.CASCADE_SCALE_IMAGE
    )
...

Вот код, который выполняется:

import cv2

# don't add 1 in arg
img = cv2.imread("your path to the image")

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faceCascade = cv2.CascadeClassifier('your Path to 
 haarcascade_frontalface_default.xml')

faces = faceCascade.detectMultiScale(
        gray_img,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(10, 10)
        flags=cv2.CASCADE_SCALE_IMAGE
    )

print(type(faces))
print(faces)

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

cv2.imshow("pic", img)

cv2.waitKey(0)

cv2.destroyAllWindows()


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...