ImageMagick подсчитайте, сколько одинаковых или почти одинаковых цветных пикселей находится по краям слева и справа от изображения

#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, если это будет счетчик снизу, так что на самом деле это не имеет значения 😀