如何使用 ImageMagick 将多幅图像平均为一张?

如何使用 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

如何正确地做这件事?

答案1

只需使用图形魔法gm convert -average *.JPG q.ppm

答案2

8 年过去了,这似乎仍然是一个问题,StackExchange 家族中还没有令人满意的答案。

这篇博文

ImageMagick 的 -average 运算符可同时对两幅图像进行平均:当前考虑的图像和上一次平均的结果。然后它继续处理下一幅图像。

因此,序列中的每一幅图像都具有相同的权重,而后面的图像具有更高的权重。这不会产生几乎所有使用此选项的人直观期望的结果。还有一个问题是所有图像都需要加载到内存中。

这两个问题的解决方案都是使用一个脚本来对图像进行递归调用转换,如下所示:

#!/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

答案3

来自 ImageMagick 论坛

convert darky1.jpg darky2.jpg lighty1.jpg lighty2.jpg -evaluate-sequence Mean avg.ppm

注意:这会立即将所有图像加载到内存中。

相关内容