Как подсчитать количество черно-белых пикселей (linux, imagemagik и т. д)
У меня черно-белые изображения (см. ниже). Как считать белые и черные пиксели (например, 30% черных и 70% белых, или 123456 черных и 39393 белых пикселей)?
p.s. Я работаю в linux, что я должен использовать? помощью ImageMagick? я предпочитаю программу интерфейса командной строки.
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