我想通过使用Imagemagick获得一系列图像的平均值。因此,我使用以下命令:
convert *.png -evaluate-sequence mean MEAN.png
我的每张图片都包含一个Alpha通道。我想要的是:通过忽略alpha通道来合并所有图像。
当我合并图像时,alpha通道被认为是“均值”方法,而我的最终图像具有透明度。那不是我想要的。
结果:
我尝试关闭-alpha参数,但Imagemagick将alpha通道转换为黑色。
convert *.png -alpha off -evaluate-sequence mean MEAN.png
结果:
Photoshop做得很好。我将所有图片加载到堆栈中并创建智能对象。当我在Photoshop中使用“均值”方法时,最终结果中不会考虑alpha通道。
我想要Imagemagick的结果:
有人知道如何使用Imagemagick做到这一点吗?
答案 0 :(得分:3)
您需要做的是使用Alpha通道作为每张图像的加权图像。来自所有alpha通道的每个像素的白色值的总分数将是用于平均值的权重。所以这样的事情应该做你想要的或至少接近。
首先,cd到你的图像目录。然后运行以下命令。
convert *.png -evaluate-sequence mean \
\( -clone 0 -alpha off \) \
\( -clone 0 -alpha extract \) \
-delete 0 +swap -compose divide -composite result.png
如果来自至少一个图像的每个像素存在一些图像纹理,则这将起作用。即在给定像素处,所有图像都不是完全黑色(透明)。
compare -metric rmse result.png mean_photoshop.png null:
125.167 (0.00190993)
所以这表明我的结果与你从photoshop获得的结果差不多有0.2%
答案 1 :(得分:2)
也许这种工作方式可以帮助你实现目标 - 或者至少解释一下这个问题:
# ImageMagick pixel enumeration: 1,1,65535,srgba
0,0: (21845,0,0,43690) #550000AA srgba(85,0,0,0.666667)
<强>输出强>
var latestResponse = Api.getResponsePayload();
var context = latestResponse.context;
Api.setResponsePayload('{"output": {"text": ["Hi $name!"]},"context" : ' + JSON.stringify(context) +'}');
答案 2 :(得分:1)
使用IM 6.8.9.4 Q16或IM 7.0.5.5 Q16 Mac OSX Sierra,这对我来说似乎没问题:
制作透明图像
convert logo: -transparent white logot.png
得到卑鄙的
convert logot.png logot.png logot.png -alpha off -evaluate-sequence mean result.png
magick logot.png logot.png logot.png -alpha off -evaluate-sequence mean result.png
这似乎也有效:
convert logot.png logot.png logot.png -channel rgb -evaluate-sequence mean -alpha off result.png
所以也许你需要升级你的ImageMagick(和/或libpng?)
您可以发布一些输入图像的zip文件,以便我们可以测试您的图像吗?
答案 3 :(得分:0)
我看到的一个问题是您提供的PNG图像在透明区域下面是黑色而不是图像纹理。因此,当您在上面的命令中禁用alpha时,您会看到黑色,并且黑色会被平均到最终结果中。您是否在Photoshop中使用了这些相同的PNG图像,或者您是否使用了Photoshop PSD图像或其他一些您使用过的图像,然后导出到PNG,这可能会在透明区域下方放置黑色。您是否尝试在Photoshop中使用相同的PNG图像来进行平均值?
实际上,您有8位颜色(调色板)图像,其中一种颜色(黑色)被指定为透明颜色。