首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MagickNET -比较两张图片,只显示差异,其余为透明

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

Stack Overflow用户
提问于 2021-02-16 19:58:33
回答 2查看 58关注 0票数 0

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

代码语言:javascript
复制
            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);
            }

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

任何帮助都是非常感谢的。

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

EN

回答 2

Stack Overflow用户

发布于 2021-02-17 03:36:28

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

Car1:

Car2:

代码语言:javascript
复制
compare -highlight-color red -lowlight-color none -compose src car1.png car2.png diff.png

票数 0
EN

Stack Overflow用户

发布于 2021-02-17 06:18:51

一般来说,我发现通过API使用Magick.Net和ImageMagick很烦人,因为所有的文档都描述了命令行,所以您不得不猜测如何将其转换为API调用。

这是我步履蹒跚的一种方法。也许有一种更优雅的方式。

输入:

代码语言:javascript
复制
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);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66223931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档