Как посчитать количество черных пикселей в png? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть черно-белый рисунок, который был нарисован онлайн, поэтому пиксели имеют только solid черный или solid белый цвет. Рисунок представляет собой png, который я анализирую в python.

im = Image.open(os.path.join(dir))
im = img_as_float(im)
plt.imshow(im)

У кого-нибудь есть советы, как посчитать количество черных пикселей в png?

Ответы [ 4 ]

0 голосов
/ 03 апреля 2020

Если вы открываете изображение с помощью PIL и ожидаете получить чистое одноканальное изображение в оттенках серого (а не цветное или палитризованное), вам следует убедиться, что вы получите следующее:

# Open image and ensure single channel greyscale image
im = Image.open(...).convert('L') 

Объяснение здесь .

Затем вы можете преобразовать в массив Numpy с помощью:

na = np.array(im)

Теперь Numpy будет подсчитывать для вас белые пиксели:

white = np.count_nonzero(im)

И черные пиксели:

black = np.count_nonzero(im==0)

Кроме того, вы можете вычесть количество белых пикселей из общего количества пикселей:

black = im.size - white
0 голосов
/ 02 апреля 2020

Если все пиксели либо черные, либо белые, это должно работать:

len([px for px in list(im.getdata()) if px[1] < 0.01])

0 голосов
/ 02 апреля 2020

Поскольку теперь это массив numpy, используйте маску и сумму:

nblack = im[np.where(im==0)].sum()
print(nblack)

Это предполагает - согласно вашему вопросу - solid черный цвет. Любой другой порог является произвольным.

0 голосов
/ 02 апреля 2020

Простой скрипт для подсчета черных пикселей:

def countBlack (image):
    blacks = 0
    for color in image.flatten():
        if color < 0.0001:
            blacks += 1
    return blacks
...