Как посчитать количество пикселей одного цвета на картинке

Обновлено: 02.07.2024

Добрый день.
Задача такая:
"Нужно узнать количество черных, серых и белых пикселей в подгружаемой картинке".

Как делаю:
Создаю Битмап, отрисовываю подгруженный мувик(куда загрузилась картинка), атачу в битмап, удалаяю оригинал - остается мув со сглаженной картинкой.
Через

прохожусь по картинке.

В классе Битмапа не нашел другого метода, который бы возвращал значение пикселя

НО! Это ладно если она 100 на 100, в основном будут грузиться от 1250 на 1100 и выше, тогда комп просто виснет.
Получается, что он ему нужно проделать 1250*1100 итераций.

Как граммотно сделать подсчет пикселей определенного цвета?
Или подскажите где, копать (желательно АС2)

заменяет пиксели определенного цвета на другой, как же он сможет подсчитать сколько пикселей в картинке со значением "ffff00" ?
Returns
Number - The number of pixels that were changed.

Да бы не создавать новую тему - продолжу тут.
Может тут соберется небольшая, но полезная кучка материала.

Что делаю вообще? - строю гистрограмму, как в фотопопе.
Когда-то просил помощи, линков. __etc дал пару инетересных урлов, хороших урлов, но увы, я делаю дополнительный модуль к проекту, который написали какие-то челы из Бобруйска.

iNils дал намек на

в Битмапдате, который возвращает кол-во замененных пикселей.

Дейсвительно, у меня получилось построить гистограмму - на 99% похожую как в Фотошопе.

Как делал.
Я беру в цикле от 1 до 256 каждый пиксель битмапы, которая есть градиент от черного до белого, после этого я применяю

к своей основной картинке (той, для которой я строю гистограмму) и заменаяю там пиксели - возвращая их количество.
Потом в мувике клонирую СТОЛБЕЦ (у него сейчас высота=1) и приравниваю к его высоте вот то кол-во замещенных пикселей.

Всё круто. почти.
Получается, что я построил такую байду - ТОЛЬКО для монохромных изображений, я не учитывал остальные цвета.

Начал читать дальше.
Наткнулся на изречение, что "PaletteMap is fast" т.е. она работает быстрее threshold-а.

В хелпе сказано, что с помощью BitmapData.paletteMap method можно строить Уровни, я так понимаю, что те уровни, что и Ctrl+L in Photoshop.

Собственно, как Фотопоп строит уровни?
Я так понимаю, что он берет каждый канал, и пробиват от белого до черного для Красного, Синего, Зеленого - Яркость данного цвета и строит гистграммы, а потом совмещает их и строит общую.

Я пробовал строить тем методом, что я делал для монохромного изображения - получается фигня (я брал пиксели от белого до черного по красному, синему и зеленому).

Но перед тем, как брать пиксели я использовал

Т.е. я отображал в трех каналах изображание, делал копии (отрисовывал три) и по ним проходился по 255 раз . мда..

Как-то мне понадобилось вычислить объём краски тех или иных цветов, исходя из эскиза сделанного на компьютере.
Я только недавно нашёл отличный весьма точный способ это делать. Возможно кому-то пригодится :)

Создаём файл, сколько нам нужно сантиметров на сантиметров и с разрешение 10 пикселей на сантиметр (не на дюйм!). Это значит у нас 1 сантиметр будет со стороной 10 пикселей, или же 100 пикселей в площади.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

К картинке можно применить фильтр упрощающий количество цветов до нужного минимума. На глаз.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Вот так получилось. Градиенты ушли.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Жмём правой кнопкой на рабочей области и выбираем пункт меню Color Range. Как пользоваться данным инструментов ищите отдельно. Выделяем нужный нам цвет.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Главная задача создать область заливки по нужному цвету. Копируя и сводя слой за слоем, я делаю его сплошным, без прозрачностей, чтобы все пиксели были чёткими и полностью залиты. Совсем лишнее стёр.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Делаем выделение и открываем панель Histogram. Там есть пункт: Pixels, количество выделенных пикселей. Но с ньюансом, есть ещё Cache level. Это особенности отображения графики, в немного упрощённом виде, для быстродействия. Чтобы получить полную информацию о всех пикселях в оригинале изображения, нужно нажать на треугольник там же вверху.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Получаем число всех выделенных пикселей.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Далее математика. У нас есть количество выделенных пикселей, в каждом сантиметре 100 пикселей. Делим количество пикселей на 100 и получаем количество квадратных сантиметров в выделенной области.
Затем можно поделить ещё раз на 100 и получим длинную прямоугольника, одна сторона которого будет метр (сто сантиметров). У нас получилось 178 сантиметров. Прямоугольника 100x178, сантиметров. Или же 1,8 метра. Нам нужно краски столько, чтобы покрыть такую область. Разумеется к итоговому числу надо добавить ещё, про запас.
Мы можем также вычислить размер ровного квадрата, если вычислим корень из числа количества пикселей. Получается что у нас квадрат со стороной 133 сантиметра.

Как посчитать площадь пикселей в Фотошопе и количество необходимой краски на эскизе Photoshop, Секрет, Стрит-арт, Длиннопост

Другие цвета считаются аналогично.
Считайте сколько у вас расход краски на квадратный метр, сколько квадратных метров тех или иных цветов и можете закупать нужное количество краски + запас.

Войти

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Считаем пиксели в одном цвете на изображении

Часто у людей возникает задача – определить, а сколько пикселей в цифровом рисунке занимает тот или иной цвет. Недавно я сам столкнулся с подобного рода задачей, при этом, в сети почти нет информации по её решению. Понадобилось обратиться за помощью к друзьям, плюс, коллеги по работе давали советы. Но, в итоге, удалось найти некий алгоритм, который позволяет решить поставленную задачу легко и быстро. И сегодня я этот метод подробно опишу.


Многие, конечно, недоумённо спросят – зачем вообще может понадобится считать количество пикселей, занятых определённым цветом? Однако задачи могут быть самыми разными. Мне, например, нужно было посчитать на карте глубин водоёма соотношение площади водной поверхности участков с разными глубинами. На карте, соответственно, они имели разный цвет, следовательно, для вычисления площади (в данном случаи, в пикселях) нужно было определить, сколько пикселей входит в каждый из цветов. Аналогичная задача может возникнуть и при необходимости определить площадь лесного массива на основе имеющейся или составленной карты.

Карту, над которой я работал, публиковать не буду, но вместо неё, для примера, возьмём кусок стандартной карты водоёма из электронной базы «Дороги России. Топо 6.22.4594».



Карта акватории озера, видно, что каждая глубина имеет свой цвет

Для обработки изображения будем использовать самый популярный редактор Adobe Photoshop, в данном случаи, версию CC (если кто-то всерьёз задумывается о стоимости этого ПО, то напомню, что мы в России и скачать из сети можно что угодно и совершенно бесплатно, но, допустим, что в данном случаи мы работаем в пробной версии, которая имеет полный функционал в течении 30 дней).

Открываем файл в редакторе и выделяем требуемую акваторию (благодаря инструменту «волшебная палочка», при его правильной настройке, это дело нескольких секунд, даже если речь идёт об очень больших файлах, а требуемые нам цвета разбросаны по рисунку отдельными пятнами).


Выделенная акватория, площадь которой, в пикселях, нам надо узнать.

Далее смотрим на гистограмму в правом углу, прежде всего, нас интересует цифра, стоящая после слов «уровней кэш». Если там была бы единица, то число пикселей было бы показано после соответствующего значения (выделено красным, как и предыдущей параметр). Но, в нашем случаи, кэш равняется двум, а значит, использовать такой результат для данной задачи нельзя. Однако для получения требуемых данных достаточно нажать на треугольник с восклицательным данным, после чего, отобразится простое число пикселей в выделенной области.


Итоговый результат, видно, что у нас 404665 пикселей

На этом всё, задача решена.

Правда, как мне подсказали, решить такую задачу можно ещё двумя методами – с использованием пакета «Матлаб» или же при помощи программы ImageJ. Однако первый вариант достаточно трудоёмкий из-за сложностей в освоении «Матлаб», а ImageJ банально отказалась запускаться на моём компьютере, от того, пришлось выполнять задачу с помощью Photoshop

У меня есть постеризованное изображение с порогом 4. Таким образом картинка состоит всего из 4-х цветов. Мне нужно сосчитать сколько пикселей каждого цвета присутствуют на изображении, как это сделать.

нужно не общее количество пикселей: высота х ширина

а именно сколько пикселей КАЖДОГО цвета. Например, белые — 1425, чёрные, 895 и так далее

Кароче, старый как мир вопрос, и сколько споров по нему было.. .
Скрипты, плагины, бла-бла-бла. Я плюнул на это, тупо импортирую файл в автокад, и там всё прекрасно показывается.
А если надо определённый цвет, то просто отделяй зоны с этим цветом, да импортируй )))

зачем вам это? Оо ну если кол-во цветов равное - посмотреть размер изображения сколько на сколько пикселей по стороне (image->image size) из этого узнать общее кол-во пикселей и поделить на 4 :)))

alt+ctrl+i
вверху появившегося окна ширина и высота файла в пикселях.
умножаем ширину на высоту и получаем площадь файла в пикселях)))

Интересный вопрос.. . Что-то про это слышал, но не припомню. Придумал такой способ: выделяете волшебной палочкой один цвет. Создаёте новый белый слой, заливаете выделение чёрным, выделение снять. Фильтр Размытие, Усреднение (Медиана) , в общем, чтоб полностью размыть чёрный цвет на всю поверхность равномерно. Выделяете кадратик и по очереди заливаете серыми образцами из палитры Образцы. В этой палитре при наведении на образец всплывают проценты заливки. Добиваетесь, чтоб образец поточнее соответствовал фону и смотрите процент заливки.
Проделав с каждым цветом такую операцию вы визуально почти точно определите процентное соотношение пикселей каждого цвета.
Сложно? Пусть кто-то предложит лучше способ, с удовольствием прочту.

"Не красиво, значит не полетит" Скриптик нужен. Или может быть из каждого цвета сделать новый слой, сохранить отдельно и потом прикинуть по размеру полученных файлов? Только я что то не сообразю, в каком формате надо сохранять, чтобы размер был пропорцинален количетсву пикселей.

Проще звезды на небе считать.
Пикселы не только трех цветов - их там 2х10 в 24 степени.

Читайте также: