Как изменить размер композиционного изображения с помощью bash в Imagemagick и Facedetect - PullRequest
0 голосов
/ 22 мая 2019

Просто работаю над добавлением смайликов в разные костюмы с помощью функции распознавания лиц (Facedetect) и Imagemagick.

Я получил смайлик для компоновки с подходящими людьми, использующими композит, но лицо ограничено в прямоугольнике, определяемом лицом.

Как мне увеличить его, чтобы покрыть голову? Вот мой текущий код ниже:

Я нормально увеличил голову, используя w + 200 h + 200, но она была плохо расположена. Мне нужно что-то, что работает последовательно

for file in facedetect/*.jpg; do
name=$(basename "$file")
i=0
facedetect  "$file" | while read -r x y w h; do
convert   "$file" smileface.png -geometry "${w}x${h}+${x}+${y}"  
-composite "faces/${name%.*}_${i}.${name##*.}" 
i=$((i+1))
done
done

1 Ответ

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

Я бы сделал это в ImageMagick, выполнив вычисления, чтобы изменить ваши координаты, чтобы они были в центре относительно изображения смайлика. Таким образом, вы можете использовать-гравитационный центр. Таким образом, когда изображение смайлика меняет размер, позиция его размещения не изменяется.

Большое изображение:

enter image description here

Смайлик:

enter image description here

Предположим, что вы получаете верхние левые относительные координаты xul, yul для размещения смайлика на большом изображении. Затем мы хотим вычислить центр изображения смайлика относительно этих координат. Как только мы получим это, координаты относительно центра большого изображения будут такими, за вычетом половины размеров большого изображения. (+ Repage обеспечивает удаление любого виртуального холста из PNG-изображения смайлика. У JPG нет виртуального холста)

xul=255
yul=175
xc=`convert smiley.png +repage -format "%[fx:$xul + w/2]\n" info:`
yc=`convert smiley.png +repage -format "%[fx:$yul + h/2]\n" info:`
offx=`convert actor.jpg -format "%[fx:$xc-w/2]\n" info:`
offy=`convert actor.jpg -format "%[fx:$yc-h/2]\n" info:`
convert actor.jpg smiley.png +repage -gravity center -geometry +${offx}+${offy} -compose over -composite result1.jpg


enter image description here

Теперь, если мы удвоим размер изображения смайлика до 300x300, нам больше не нужно компенсировать это, потому что offx, offy по-прежнему являются центральными относительно центров, а центры не меняются при увеличении смайлика.

convert actor.jpg smiley.png +repage -gravity center -geometry 300x300+${offx}+${offy} -compose over -composite result2.jpg


enter image description here

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