ImageMagick: Как обработать многократный анализ с форматом + информация в одном выполнении конвертации? - PullRequest
0 голосов
/ 21 февраля 2019

Я анализирую четыре 1px границы (края) изображения, используя что-то вроде этого:

convert IMAGE.jpg +repage -crop x1\!+0+0 -format "%[fx:standard_deviation]\n" info:-
convert IMAGE.jpg +repage -crop x1\!+0+%[fx:h-1] -format "%[fx:standard_deviation]\n" info:-
convert IMAGE.jpg +repage -crop 1\!x+0+0 -format "%[fx:standard_deviation]\n" info:-
convert IMAGE.jpg +repage -crop 1\!x+%[fx:w-1]+0 -format "%[fx:standard_deviation]\n" info:-

Это дает мне стандартное отклонение всех краев (сверху, снизу, слева, справа), так что если большинствоиз них 0, я знаю, что, вероятно, есть основной цвет фона / границы.

Это хорошо, но также плохо оптимизировано, потому что convert должен прочитать файл 4 раза.Как я могу заставить его печатать все это в одном исполнении?

Кроме того, есть ли способ узнать «средний» цвет этих ребер?например, если изображение имеет размер 100x100, а область верхней границы 100x1 имеет 50 пикселей черного и 50 белого, я получаю «128.128.128,255» рядом со стандартным отклонением для этого края.

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Я немного тороплюсь и не проверял это, но вы можете сохранить изображение в MPR - Magick Persistant Register , который является именованным кусочком памяти, и вспомнить его так:

magick start.png -write MPR:orig -delete 0 -format "%[fx:standard_deviation]\n" \
   \( MPR:orig -crop x1\!+0+0          -write info: -delete 0 \) \
   \( MPR:orig -crop x1\!+0+%[fx:h-1]  -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+0+0          -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+%[fx:w-1]+0  -write info: -delete 0 \) null:

Это может также привести к вычислению среднего значения:

magick start.png -write MPR:orig -delete 0 \
   \( MPR:orig -crop x1\!+0+0          -format "%[fx:standard_deviation], " -write info: -resize 1x1\! -format "%[mean]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop x1\!+0+%[fx:h-1]  -format "%[fx:standard_deviation], " -write info: -resize 1x1\! -format "%[mean]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+0+0          -format "%[fx:standard_deviation], " -write info: -resize 1x1\! -format "%[mean]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+%[fx:w-1]+0  -format "%[fx:standard_deviation], " -write info: -resize 1x1\! -format "%[mean]\n" -write info: -delete 0 \) null:

Пример вывода

0, 65535
0, 0
0.290373, 32767.5
0.290373, 32767.5

Или, окончательный ответ:

magick start.png -write MPR:orig -delete 0 \
   \( MPR:orig -crop x1\!+0+0          -format "%[fx:standard_deviation], %[fx:mean.r], %[fx:mean.g],%[fx:mean.b]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop x1\!+0+%[fx:h-1]  -format "%[fx:standard_deviation], %[fx:mean.r], %[fx:mean.g],%[fx:mean.b]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+0+0          -format "%[fx:standard_deviation], %[fx:mean.r], %[fx:mean.g],%[fx:mean.b]\n" -write info: -delete 0 \) \
   \( MPR:orig -crop 1\!x+%[fx:w-1]+0  -format "%[fx:standard_deviation], %[fx:mean.r], %[fx:mean.g],%[fx:mean.b]\n" -write info: -delete 0 \) null:

Пример вывода

0, 1, 0,0
0, 0, 0,0
0.290373, 0.5, 0,0
0.290373, 0.5, 0,0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...