Обрезка головы квадратная - PullRequest
1 голос
/ 04 августа 2020

У меня есть изображения, как показано ниже.

enter image description here enter image description here

And I want to crop only the head square as shown below.

enter image description here введите описание изображения здесь

Есть ли способ добиться этого? Либо с помощью генератора данных Keras, либо просто с помощью обычной функции обрезки python. Я попробовал указанные ниже функции, но не смог добиться ожидаемого результата.

def crop_center(pil_img, crop_width, crop_height):
img_width, img_height = pil_img.size
return pil_img.crop(((img_width - crop_width) // 2,
                     (img_height - crop_height) // 2,
                     (img_width + crop_width) // 2,
                     (img_height + crop_height) // 2))

1 Ответ

1 голос
/ 04 августа 2020

Вам не нужен генератор данных Keras для обрезки изображения.

Вы можете использовать python пакеты, такие как PIL (подушка) или cv2 (opencv), чтобы обрезать изображение.

Вам нужны координаты x, y заголовка / квадрата, а также ширина и высота кадрирования, чтобы делать то, что вы хотите.

Вы неправильно используете PIL-кадрирование.

Что вам нужно сделать:

cropped_image = pil_img.crop((x-top_left, y-top_left,x-bottom_right, y-bottom_right))
cropped_image.show()

Примечание:

x-bottom_right = x-top_left + crop_width
y-bottom_right = y-top_left + crop_height

Дополнительно с OpenCV :

import cv2
orig_img = cv2.imread("path_to_your_image")
crop_img = orig_img[y:y+h, x:x+w]
cv2.imshow("Cropped Image", crop_img)
cv2.waitKey(0)

Здесь x, y - координаты x, y head-box/square, которые вы хотите обрезать, т.е. x-top_left и y-top_left соответственно.

w = crop_width
h = crop_height
...