Автоматическое объединение двух файлов изображений в один

Я использую инструмент командной строки Montage для объединения двух изображений JPG. Выходной jpg содержит общую полосу, присутствующую во входных jpgs. Ниже приведена команда для слияния двух jpgs:

montage -geometry 500 input1.jpg input2.jpg output.jpg

Как я могу избежать общей области в выходном файле? Есть ли другой инструмент для автоматического слияния двух изображений?

4 ответа

В ImageMagick вы можете просто добавить два изображения рядом или сверху / снизу.

convert image1.jpg image2.jpg -append result.jpg

будет делать сверху / снизу

convert image1.jpg image2.jpg +append result.jpg

будет делать влево / вправо.

Вы можете добавить столько изображений, сколько хотите разных размеров. Вы можете использовать параметр -gravity, чтобы выровнять их по желанию. Если размеры разные, то у вас будут фоновые области, которыми вы можете управлять цветом, используя -background somecolor. При желании вы можете изменить размер изображения, добавив -resize 500 после чтения входных данных и перед добавлением.

Смотрите http://www.imagemagick.org/Usage/layers/

Если вы хотите сделать то, что предлагает Марк Сетчелл, то использование -page, вероятно, является лучшим методом, если у вас есть несколько изображений для слияния и смещения отличаются. Если у вас есть только пара изображений, вы можете перекрывать их, используя +smush в ImageMagick. Это как + добавление, но допускает либо перекрытие, либо разрыв в зависимости от знака аргумента. В отличие от -page, он сдвигается только в одном направлении в соответствии с +/- smush. Используя изображения Марка,

convert left.jpg right.jpg +smush -400 result.jpg

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

Итак, если мы начнем с left.png:

введите описание изображения здесь

а также right.png:

введите описание изображения здесь

Вы, вероятно, хотите это:

convert left.png -page +200 right.png -mosaic result.png

введите описание изображения здесь


Чтобы вы могли видеть, что произойдет, если я изменю смещение по оси x, а также как добавить смещение по оси y:

convert left.png -page +280+30 right.png -mosaic result.png

введите описание изображения здесь

Прежде чем найти этот ответ, я выбрал немного другую стратегию:

  • (конкретно для меня)-resizeизображения, если они имеют разный масштаб (dpi)
  • Поместите каждое изображение на холст желаемых объединенных размеров (left+right-overlap):
    • -extentэто окончательные размеры
    • -gravityпозиционирует каждое изображение сверху/снизу слева/справа
    • -background noneпоэтому пустая часть не белая
  • сложить их с

(Код ImageMagick 7, просто замените magickс convertдля IM6)

      sz=1105x1155
magick \
  \( \( right.jpg -resize 924x724^ \) \
              -background none -gravity northeast -extent $sz \) \
  \( left.jpg -background none -gravity southwest -extent $sz \) \
-composite result.jpg

Это кажется менее элегантным, чем существующие ответы, например-mosaicсогласно документации , используемый @Mark Setchell умнее :

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

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

Другие вопросы по тегам