Как подсчитать количество черно-белых пикселей (linux, imagemagik и т. д)

У меня черно-белые изображения (см. ниже). Как считать белые и черные пиксели (например, 30% черных и 70% белых, или 123456 черных и 39393 белых пикселей)?

p.s. Я работаю в linux, что я должен использовать? помощью ImageMagick? я предпочитаю программу интерфейса командной строки.

sample

4 ответов


вы можете использовать функцию гистограммы ImageMagick, чтобы получить количество пикселей для каждого цвета на изображении. Использование вашего изображения в качестве примера:

$ convert XPH7c.gif -define histogram:unique-colors=true \
> -format %c histogram:info:-
    153985: (  0,  0,  0,255) #000000 black
    182138: (255,255,255,255) #FFFFFF white

Итак, ваше изображение имеет 153985 черных пикселей и 182138 белых пикселей.


Если все ваши пиксели черные или белые, вы можете рассчитать среднюю яркость пикселей с помощью ImageMagick, а затем умножить ее на количество пикселей в изображении (ширина x высота):

convert bw.gif -format "%[nint(fx:mean*w*h)]" info:
182138

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

read white black < <(convert bw.gif -format "%[fx:mean*w*h] %[fx:(1-mean)*w*h]" info:)

echo $white,$black
182138,153985

другой способ сделать это-клонировать изображение и установить все пиксели в клонированном изображении на черный цвет, а затем вычислить абсолютную ошибку по отношению к исходному изображению следующим образом:

convert XPH7c.gif \( +clone -evaluate set 0 \) -metric AE -compare -format "%[distortion]" info:
182138

это говорит вам, что в исходном изображении есть 182,138 пикселей, которые отличаются от полностью черного клонированного изображения, т. е. 182,138 не черных (белых) пикселей.


менее умный, но более интуитивный вариант:

$ конвертировать XPH7c.gif XPH7c.txt

$ grep "белый" XPH7c.txt / NL / tail -1

182138 514,632: (255,255,255,255) #FFFFFF белый

$ grep "черный" XPH7c.txt / NL / tail -1

153985 530,632: ( 0, 0, 0,255) #000000 черный

объяснение:

1) конвертировать gif файл в txt файл (читаемый человеком список, предоставляющий каждую координату пикселя и соответствующий цвет)

0,0: ( 0, 0, 0,255) #000000 черный

1,0: ( 0, 0, 0,255) #000000 черный

2,0: (255,255,255,255) #FFFFFF белый

(...)

530,632: ( 0, 0, 0,255) #000000 черный

2) Список всех" черных "и" белых " пикселей с помощью grep (отображать только последнюю строку с хвостом -1)

3) Дополнительный шаг -- отображать только нужные данные с помощью awk или другого подобного инструмента

$ grep "черный" XPH7c.txt / NL / tail -1 / awk '{печать $8 ": "$1}'

черный: 153985