TypeError: crop () принимает от одного до двух позиционных аргументов, но три - PullRequest
0 голосов
/ 15 марта 2020

Я работал с numpy, PIL и OpenCV, чтобы создать систему обнаружения и обработки лиц. Я пытаюсь обрезать ограничивающие рамки (для дальнейшей обработки, которую я еще не написал), поэтому я написал следующее:

import cv2
import numpy as np
from PIL import Image 
def main():
    #Creates a camera object
    vidCapture = cv2.VideoCapture(0)
    while 1:
        faceDetector = FaceDetector()
        #stores the current frame into the frame variable
        ret, frame = vidCapture.read()
        #detects any faces and draws bounding boxes around them
        img = faceDetector.find_any_faces(frame)
        processing = Processing()
        #crops everything around the bounding boxes for the faces
        processing.mask(frame, faceDetector.getPoint1(), faceDetector.getPoint2())

class Processing():

    #masks around the bounding boxes for the face
    def mask(self, image, p1, p2):
        #creates a numpy array from the image
        arrimg = np.array(image)
        #creates a PIL Image from the np array
        img = Image.fromarray(arrimg)

        #crops around each bounding box
        cropped_image = img.crop(p1, p2)
        return cropped_image

Это выдает ошибку TypeError с сообщением: " crop () принимает от 1 до 2 позиционных аргументов, но было дано 3 ". Судя по тому, что я мог найти, они обычно не включают self в качестве параметра для метода, но я включаю мой в код. Если бы кто-нибудь мог помочь, это было бы здорово!

1 Ответ

1 голос
/ 15 марта 2020

img.crop() принимает один кортеж в качестве параметра (второй - это self, который уже добавлен). Когда вы передаете 2, это заканчивается тремя аргументами, что приводит к ошибке:

Image.crop (box = None)

Возвращает прямоугольную angular область из этого образ. Блок представляет собой 4-кортеж, определяющий левую, верхнюю, правую и нижнюю координаты пикселя.

Параметры: box - прямоугольник кадрирования в виде (левого, верхнего, правого, нижнего) кортежа.

Вы можете сложить свои кортежи в один кортеж из 4 элементов:

img.crop(p1 + p2)

или распределить их:

img.crop((*p1, *p2))
...