#imagemagick
Вопрос:
Это пример изображения в формате PNG:
он 50х40, но увеличен здесь, чтобы лучше видеть.
Шестнадцатеричное значение нижнего левого и нижнего правого пикселей равно F9E4B7
Мне нужно знать, сколько пикселей по вертикальным краям слева и справа внизу почти такого цвета, например, 1% размытости, потому что они не все точно F9E4B7
, но некоторые очень немного отличаются.
В этом случае это будет 20 пикселей с каждой стороны:
Я отмечу области, которые нужно подсчитать, просто чтобы было совершенно ясно:
Мне также нужно уметь точно подсчитывать , сколько пикселей F9E4B7
, что в данном случае будет 15 слева и 20 справа, я отмечу немного разные области, чтобы было ясно, где счетчик должен остановиться:
Ответ №1:
Способ сделать это в Imagemagick-использовать fuzz, чтобы изменить все пиксели, близкие к этому цвету, на белый, а остальные-на черный. Обрежьте первый или последний столбец и используйте-fx, чтобы получить отсчет от среднего значения*ширины*высоты. Так, например, для левого полного столбца всего изображения нужно
Синтаксис Unix Imagemagick 6:
convert tan.png -alpha off
-fuzz 1% -fill white -opaque "#F9E4B7" -fill black opaque white
-gravity west -crop 1x 0 0 -format "%[fx:round(mean*w*h)]n" info:
Синтаксис Windows Imagemagick:
convert tan.png -alpha off ^
-fuzz 1% -fill white -opaque "#F9E4B7" -fill black opaque white ^
-gravity west -crop 1x 0 0 -format "%[fx:round(mean*w*h)]n" info:
Результат:
108
Чтобы попасть с правой стороны, используйте гравитацию на восток.
Для точного подсчета используйте-fuzz 0
Для Imagemagick 7 измените convert
значение на magick
Комментарии:
1. Да, большое вам спасибо!! Ты избавил меня от тонны обходных путей!!
2. -но fuzz 0 не работает? Я получаю 0
3. Хороший ответ. Обратите внимание, что он также будет сопоставлять и подсчитывать пиксели этого цвета по краям в верхней части изображения — не знаю, имеет ли это значение.
4. Может быть, попробовать
fuzz
вместо-fuzz 0
5. @MarkSetchell да, я уже догадался об этом, но это приведет, возможно, к тому, что 2 из 100 изображений будут обработаны не идеально, а не как 1 из 100, если это будет счетчик снизу, так что на самом деле это не имеет значения 😀