ImageMagick可比较输出图像上用2种不同颜色标记的2幅图像

ImageMagick可比较输出图像上用2种不同颜色标记的2幅图像,image,imagemagick,comparison,difference,Image,Imagemagick,Comparison,Difference,我想在使用Imagemagick时在输出图像上制作两种不同的颜色。我有一个带有“Hello World”的原始图像。在同一区域还有一张修改过的图片,上面写着“Hello Warcraft”。默认的compare命令将给我一个图像,并用红色标记所有差异 现在我想使用两种不同的颜色,比如标记为红色的“orld”和标记为另一种颜色的“arcraft”,可能是蓝色。ImageMagick能做到这一点吗 如果没有,如何使用ImageMagick将指定的颜色转换为另一种颜色 下面是示例 然后我使用类似的

我想在使用Imagemagick时在输出图像上制作两种不同的颜色。我有一个带有“Hello World”的原始图像。在同一区域还有一张修改过的图片,上面写着“Hello Warcraft”。默认的compare命令将给我一个图像,并用红色标记所有差异

现在我想使用两种不同的颜色,比如标记为红色的“orld”和标记为另一种颜色的“arcraft”,可能是蓝色。ImageMagick能做到这一点吗

如果没有,如何使用ImageMagick将指定的颜色转换为另一种颜色

下面是示例

然后我使用类似的比较:compare imageA.png imageB.png imageC.png

然后图像C将是:

但是现在我只知道图像A和图像B之间有一些区别。所以我想在图像C上做一些颜色代码,它可能像下面的图像D:


由此我可以知道哪些部分是相同的,绿色表示图像A上的差异,红色表示图像B上的差异。

您可以在ImageMagick 6(Unix语法)中执行此操作

图像a:

图像B:


这是一种有偏见的差异。任何高于0.5或中等灰度(标准化值)的颜色都将是对应于一个图像的一种颜色,低于0.5的颜色将是对应于另一个图像的另一种颜色

看到和

对于ImageMagick 7,将转换为magick

添加:

给定新的输入图像。以下是如何做到这一点:

图像a:

图像B:



对不起,我用蓝色代替了绿色。但如果需要,您可以更改它。

您可以在ImageMagick 6(Unix语法)中执行此操作

图像a:

图像B:


这是一种有偏见的差异。任何高于0.5或中等灰度(标准化值)的颜色都将是对应于一个图像的一种颜色,低于0.5的颜色将是对应于另一个图像的另一种颜色

看到和

对于ImageMagick 7,将转换为magick

添加:

给定新的输入图像。以下是如何做到这一点:

图像a:

图像B:



对不起,我用蓝色代替了绿色。但是如果你愿意,你可以改变它。

我不明白这个问题。你能将一些示例图片发布到免费的主机服务并将URL放在这里吗?然后再解释清楚你想要什么。对不起,我没有免费的服务器。我将试着这样解释:图像A显示一辆汽车,图像B显示一辆自行车,如果比较它们,汽车和自行车都将在图像C上标记为红色,对吗?现在我想做一些彩色标记。汽车是蓝色的,自行车是红色的。所以我可以从图C中得到信息,A和B之间有什么不同。我不理解这个问题。你能将一些示例图片发布到免费的主机服务并将URL放在这里吗?然后再解释清楚你想要什么。对不起,我没有免费的服务器。我将试着这样解释:图像A显示一辆汽车,图像B显示一辆自行车,如果比较它们,汽车和自行车都将在图像C上标记为红色,对吗?现在我想做一些彩色标记。汽车是蓝色的,自行车是红色的。所以我可以从图C中得到A和B之间的区别。非常感谢。但我的想法有个问题。背景颜色已更改,无法看到相同的部分,即“Hello W”。我仍然希望在结果图像上保留相同的部分。如果你使用比较命令,它会给你一个不同的结果图像,我只想用不同的颜色标记不同的地方,默认为所有红色。我修改了问题并添加了一些图片来解释结果。你能帮我查一下吗?再次感谢。抱歉,compare无法按您想要的方式着色。但请看我对答案的补充。非常感谢。这是伟大的,也可以看作是“比较”的结果。这对我帮助很大。谢谢你的帮助。我能问最后一个问题吗?如果我想在已经导入im4Java的java程序中使用该命令,现在尝试在程序IMOperation cmpOp=new IMOperation()中构建该命令;cmpOp.addImage(预期);cmpOp.addImage(实际);cmpOp.write(“mpr:img”);cmpOp.p_delete();cmpOp.填充(“白色”);cmpOp.colorize(80);对于命令中的“\(”和“\”,您知道如何构建它吗?请忽略我在注释中的最后一个问题,我通过检查im4java打包代码找到了方法。使用cmpOp.addSuboption()。非常感谢。非常感谢。但我的想法有个问题。背景颜色已更改,无法看到相同的部分,即“Hello W”。我仍然希望在结果图像上保留相同的部分。如果你使用比较命令,它会给你一个不同的结果图像,我只想用不同的颜色标记不同的地方,默认为所有红色。我修改了问题并添加了一些图片来解释结果。你能帮我查一下吗?再次感谢。抱歉,compare无法按您想要的方式着色。但请看我对答案的补充。非常感谢。这是伟大的,也可以看作是“比较”的结果。这对我帮助很大。谢谢你的帮助。我能问最后一个问题吗?如果我想在已经导入im4Java的java程序中使用该命令,现在尝试在程序IMOperation cmpOp=new IMOperation()中构建该命令;cmpOp.addImage(预期);cmpOp.addImage(实际);cmpOp.write(“mpr:img”);cmpOp.p_delete();cmpOp.填充(“白色”);cmpOp.colorize(80);对于命令中的“\(”和“\”,您知道如何构建它吗?请忽略我在注释中的最后一个问题,我通过检查im4java打包代码找到了方法。使用cmpOp.addSuboption()。非常感谢。
convert img1.png img2b.png \
-define compose:args="0,1,-1,0.5" \
-compose mathematics -composite -auto-level \
\( xc:red xc:blue +append \) -clut diff.png
convert imageA.png imageB.png -write mpr:img +delete -fill white -colorize 80% \
\( mpr:img -compose minus -composite -threshold 0 -background red -alpha shape \) \
\( mpr:img +swap -compose minus -composite -threshold 0 -background blue -alpha shape \) \
-background none -compose over -flatten result.png