Как усреднить несколько изображений в одно с помощью ImageMagick?
convert -average darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg l.ppm
convert -average lighty1.jpg lighty2.jpg lighty1.jpg lighty2.jpg d.ppm
l.ppm намного легче, чем d.ppm. Порядок изображений имеет значение (но не должен).
То же самое для использования evaluate-sequence mean
,
Как это сделать правильно?
3 ответа
Просто используйте GraphicsMagick: gm convert -average *.JPG q.ppm
Спустя 8 лет это все еще кажется проблемой, и в семействе StackExchange нет удовлетворительных ответов.
Оператор -Mage от ImageMagick усредняет сразу два изображения: текущее рассматриваемое изображение и результат предыдущего усреднения. Затем он переходит к следующему изображению.
Таким образом, вместо того чтобы каждое изображение в последовательности имело одинаковый вес, более поздние изображения имеют больший вес. Это не дает результата, которого все интуитивно ожидали бы, используя эту опцию. Также существует проблема, что все изображения должны быть загружены в память.
Решением обеих проблем является скрипт для рекурсивного вызова конвертации для пар изображений, например:
#!/bin/bash
i=0
for file in img*jpg; do
echo -n "$file.. "
if [ $i -eq 0 ]; then
cp $file avg.jpg
else
convert $file avg.jpg -fx "(u+$i*v)/$[$i+1]" avg.jpg
fi
i=$[$i+1]
done
convert darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg -evaluate-sequence Mean avg.ppm
Будьте осторожны: при этом в память загружаются все изображения одновременно.