Как программно (желательно с использованием PIL в Python) рассчитать общее количество пикселей объекта с зачищенным фоном? - PullRequest
4 голосов
/ 05 октября 2019

У меня есть несколько картинок, на каждой из которых объект удален. Размер изображения составляет 500x400 пикселей.

Я ищу способ программно (предпочтительно с использованием python) рассчитать общее количество пикселей изображения внутри изображения (внутри пространства без фона).

Я использовал пакет PIL в Python, чтобы получить размеры объекта изображения следующим образом:

print(image.size)

Эта команда успешно создала размеры всего изображения (500x400 пикселей), но неразмеры объекта интереса внутри изображения.

Кто-нибудь знает, как рассчитать размеры объекта внутри изображения, используя python? Ниже приведен пример изображения.

Picture

1 Ответ

3 голосов
/ 05 октября 2019

Вы можете залить фоновые пиксели некоторым цветом, отсутствующим на изображении, например, пурпурным, затем подсчитать пурпурные пиксели и вычесть это число из числа пикселей в изображении (ширина x высота).

Здесьпример:

#!/usr/bin/env python3

from PIL import Image, ImageDraw
import numpy as np

# Open the image and ensure RGB
im = Image.open('man.png').convert('RGB')

# Make all background pixels magenta
ImageDraw.floodfill(im,xy=(0,0),value=(255,0,255),thresh=50)

# Save for checking
im.save('floodfilled.png')

# Make into Numpy array
n = np.array(im)

# Mask of magenta background pixels
bgMask =(n[:, :, 0:3] == [255,0,255]).all(2)
count = np.count_nonzero(bgMask)

# Report results
print(f"Background pixels: {count} of {im.width*im.height} total")

Пример вывода

Background pixels: 148259 of 199600 total

enter image description here

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

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