Как дополнить изображения определенным размером, например, 720 * 576, со значением пикселя / границей? - PullRequest
1 голос
/ 28 мая 2019

У меня есть изображения различных размеров, таких как 122 * 98, 98 * 65, 320 * 256, 620 * 540. Как сделать все изображения фиксированного размера, скажем, 720 * 576, заполнив их границей или некоторым значением пикселя? Есть ли общий способ сделать это, который работает для входных изображений любого размера? Я попробовал некоторые методы, используя модуль PIL, но не получил общего решения.

Ответы [ 2 ]

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

Я предполагаю, что вы довольно независимы от инструментов, поскольку вы пометили OpenCV , PIL / Pillow и skimage , поэтому я бы предложил просто использовать ImageMagick в командной строке:

Итак, начиная с этих изображений как 1.png, 2.png и 3.png:

enter image description here

enter image description here

enter image description here

Вы можете создать выходной каталог и поместить их всех на север-Западный угол пурпурного фона:

mkdir output
magick mogrify -path output -background magenta -extent 720x576 [123].png

enter image description here

Или поместите их все в центр желтого фона:

magick mogrify -path output -gravity center -background yellow  -extent 720x576 [123].png

enter image description here

Пропустите -path output, если вы хотите, чтобы файлы были перезаписаны на месте.

Пропустите слово magick, если работает v6 или старше.


Если вы специально хотите сделать это в Python, один из способов - сделать сплошной холст правильного размера и цвета отступа, который вы хотите использовать в качестве выходного изображения, а затем вставить свое изображение на этот холст.либо наверху леваt или по центру, используя несколько простых математических выражений.

Другой вариант - PIL / Pillow's ImageOps.expand(), как здесь .

0 голосов
/ 28 мая 2019

Вы ищете функцию cv2.remap () .Эта функция имеет параметр, который позволяет вам определять постоянное значение границы.Учебник Opencv на https://docs.opencv.org/3.4/d1/da0/tutorial_remap.html должен дать вам достаточно информации для начала.Блок if ind == 0: в руководстве изменяет размер изображения на 50%.Вы должны быть в состоянии использовать это, чтобы получить фиксированный размер 720x576.

...