ImageMagick - изменить цвет фона выбранного ограничивающего прямоугольника - PullRequest
1 голос
/ 23 мая 2019

У меня уже есть нормализованные вершины выбранного ограничивающего прямоугольника (например, xmin: 0,68, ymin: 0,47, xmax: 0,94, ymax: 0,82), и я хочу сохранить это поле в другом файле .jpg.Кроме того, в исходном изображении я хочу сделать эту выделенную рамку полностью белой.Возможно ли это с помощью Imagemagick?

Ответы [ 3 ]

3 голосов
/ 23 мая 2019

Используя ImageMagick версии 6, команда ниже создаст два выходных изображения.(Пример команды для ImageMagick версии 7 находится ниже в ответе.)

Первое выходное изображение будет обрезано из входного изображения, используя ограничивающий прямоугольник, начинающийся с w * 0,68xh * 0,47 и заканчивающийся на w *0,94xh * 0,82.

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

convert input.png \
   -set option:distort:viewport "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]" \
   \( +clone -distort affine "0,0 -%[fx:w*0.68],-%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -set page "%[fx:u.w]x%[fx:u.h]+%[fx:t*(u.w*0.68)]+%[fx:t*(u.h*0.47)]" \
   -flatten result2.png

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

Затем в скобках он создает клон и выполняет "-distort affine"который, по сути, обрезает изображение и правильно находит его в этом окне просмотра.Он записывает этот результат в первое изображение вывода «result1.png».Затем, оставаясь внутри скобок, он заполняет этот обрезанный фрагмент белым.

После этого он устанавливает геометрию подкачки, чтобы в конечном итоге белый фрагмент мог быть скомпонован обратно в исходное положение поверх входного изображения.

Он завершается сглаживанием белого фрагмента на входном изображении и записывает второе выходное изображение "result2.png".

То же самое можно сделать с помощью ImageMagick версии 7 с несколько менее сложной командой..

magick input.png \
   \( +clone \
   -crop "%[fx:(w*0.94)-(w*0.68)]x%[fx:(h*0.82)-(h*0.47)]+%[fx:w*0.68]+%[fx:h*0.47]" \
   -write result1.png -fill white -colorize 100 \) \
   -flatten result2.png

Это выполняет вычисления непосредственно в операции "-crop", а геометрия подкачки сохраняется в кадрированном фрагменте, поэтому ее можно сплющить обратно в исходное положение без сброса геометрии.

Это синтаксис * nix.Чтобы это работало в Windows, измените обратную косую черту в продолжениях строки "\" на "^" и удалите те обратные косые черты, которые выходят за скобки "\ (... \)".

2 голосов
/ 23 мая 2019

Начиная с этого:

enter image description here

и зная, что верхний левый угол памятника находится в 400,10, а нижний правый - в500,200, вы можете извлечь памятник в файл с помощью:

magick photo.jpg -crop 100x190+400+10 extract.jpg

enter image description here

и перекрасить в белый цвет с помощью:

magick photo.jpg -fill white -draw "rectangle 400,10 500,200" overpainted.jpg

enter image description here

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

magick photo.jpg -fill "rgba(255,255,255,0.5)" -draw "rectangle 400,10 500,200" overpainted.jpg

enter image description here


Вы можете выполнить обе операции за один раз:

magick photo.jpg \( +clone -fill white -draw "rectangle 400,10 500,200" -write overpainted.jpg +delete \) -crop 100x190+400+10 extract.jpg
1 голос
/ 23 мая 2019

Вот еще одна вариация в ImageMagick 6. Он обрезает изображение и сохраняет его, а затем удаляет.Затем используйте -region, чтобы написать белый цвет в этой ограничительной рамке.

Это синтаксис Unix.Для Windows удалите \ из круглых скобок и измените конец строки \ на ^.

Ввод:

enter image description here

convert img.jpg \
\( +clone -crop 100x190+400+10 +repage +write result1.jpg +delete \) \
-region 100x190+400+10 -fill white -colorize 100 +region result2.jpg


enter image description here

enter image description here

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