通过减去具有不同背景的两个图像来获得alpha

时间:2011-07-13 20:49:54

标签: c++ image image-processing imagemagick image-manipulation

我使用的程序可以渲染彩色图像但只有没有alpha信息。我希望通过使用两个并减去它们来从这些图像获取alpha信息。我可以将背景设置为不同的颜色。

我的想法是,如果我渲染带有黑色背景的图像,而另一个带有白色的图像,那么我可以从中删除这些图像彼此和获得Alpha通道。但它只是一个理论,我不知道如何在实践中做到这一点,并且如果有任何标准的方法/算法通过相互减去它们从两个图像中提取alpha信息。

我想使用命令行程序(或者在C ++中非常容易使用的)来执行此处理。我之前使用过ImageMagick的convert.exe,但我从未使用ImageMagick中的其他工具。

有没有人可以推荐我如何在实践中做到这一点?我正在寻找的是某种命令行解决方案或C ++库,其中包含易于理解的示例文件,可以做什么。

更新: 我的背景是计算机生成的,纯色。所以我可以把它设置为0,0,0黑色。这是一个例子。

sample image

1 个答案:

答案 0 :(得分:7)

this如果您的对象与背景相差足够,但this看起来可能完全您要求的内容

编辑:第二个以此命令行结束(用<>替换图片中的内容)

  convert <image1> <image2> -alpha off \
          \( -clone 0,1 -compose difference -composite \
             -separate -evaluate-sequence max -auto-level -negate \) \
          \( -clone 0,2 -fx "v==0?0:u/v-u.p{0,0}/v+u.p{0,0}" \) \
          -delete 0,1 +swap -compose Copy_Opacity -composite \
          <output>

您需要在输出中使用支持alpha的格式,但这可能是您想要的。 (注意:我实际上并没有为自己尝试这个,所以它可能不适用于最新的imagemagick版本,因为我不认为文档总是最新的)

或者,如果你真的只使用纯黑色和白色,你可以这样做:

  convert <image1> <image2> -alpha off \
          \( -clone 0,1 -compose difference -composite -negate \) \
          \( -clone 0,2 +swap -compose divide -composite \) \
          -delete 0,1 +swap -compose Copy_Opacity -composite \
          <output>