Если вы открываете изображение с помощью 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