微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MagickNET - 比较两张图片,只显示差异,其余透明

如何解决MagickNET - 比较两张图片,只显示差异,其余透明

目标:比较两个 PNG 图像并创建一个仅包含更改的新图像(未以红色或任何形式突出显示),而 png 的其余部分是透明的。

            MagickImage newImg = new MagickImage(image2Path);

            MagickImage oldImage = new MagickImage(diffImagePath);

            oldImage.Compose = CompositeOperator.Difference;

            var diffimage = new MagickImage();

            using (var imgDiff = new MagickImage())
            {
                double diffd = newImg.Compare(oldImage,ErrorMetric.Absolute,diffimage);
            }

比较两张相同的图片时,我得到的结果是一样的,但有点不透明。

感谢任何帮助。

编辑: 基本上我想结束的是这个。但不是结果有白色背景,我希望它是透明的。

enter image description here

解决方法

在命令行 ImageMagick 中,这将是如何做到这一点。抱歉,我不是 Magick.Net 用户。但是翻译应该是显而易见的。

汽车 1:

enter image description here

汽车 2:

enter image description here

"some thing"

enter image description here

,

我发现通过 API 使用 Magick.Net 和 ImageMagick 通常很烦人,因为所有文档都描述了命令行,因此您必须猜测如何转换为 API 调用。

这是我设法蹒跚而行的一种方法。也许有更优雅的方式。

输入:

Car with writing Car without writing

var newImg = new MagickImage(pathToCarWithWriting);
var oldImg = new MagickImage(pathToBlankCar);

// Calcluate a greyscale mask for any changed pixels.
// The mask should not have an alpha channel so it can work with Copy_Opacity
// The 'treshold' value of 60% is stolen from 
// https://stackoverflow.com/questions/38060940/how-to-create-black-and-white-images-in-magick-net
var diffMask = newImg.Clone();
diffMask.Composite(oldImg,CompositeOperator.Difference,Channels.RGB);
// Convert to greyscale
diffMask.Threshold(new Percentage(60));


var changed = newImg.Clone();
// Overlay a greyscale mask to the new image,using CopyAlpha
// (which does not copy the alpha channel when the overlay has no alpha channel,but instead treats it as a mask)
// Now only the areas that are different in newImg and oldImg will be visible in Changed.
changed.Composite(diffMask,CompositeOperator.CopyAlpha);

结果(除了黄色之外都是透明的):

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。