Вы можете залить фоновые пиксели некоторым цветом, отсутствующим на изображении, например, пурпурным, затем подсчитать пурпурные пиксели и вычесть это число из числа пикселей в изображении (ширина 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
Не уверен, насколько важна прилагаемаяобласти между руками и телом для вас ... если вы просто замените все серые, не используя технику заливки, вы рискуете сделать, скажем, рубашку пурпурной и считать это фоном.