C# 利用emgu分析两幅图像的差异

C# 利用emgu分析两幅图像的差异,c#,emgucv,C#,Emgucv,我正在用C#编码,我需要帮助处理两幅图像之间的差异。我正在使用emgu来帮助我完成这个部分。这里的问题是,只要像素中存在差异,它就会显示在结果图片中 但是,我需要的是,如果RefImg的像素高于CompImg,则颜色应为红色,如果较小,则应为绿色 代码也应该花费最少的时间来执行 下面的代码就是我现在使用的代码 Image<Bgr, Byte> RefImg = new Image<Bgr, Byte>(new Bitmap(refImg)); Image<Bgr,

我正在用C#编码,我需要帮助处理两幅图像之间的差异。我正在使用emgu来帮助我完成这个部分。这里的问题是,只要像素中存在差异,它就会显示在结果图片中

但是,我需要的是,如果RefImg的像素高于CompImg,则颜色应为红色,如果较小,则应为绿色

代码也应该花费最少的时间来执行

下面的代码就是我现在使用的代码

Image<Bgr, Byte> RefImg = new Image<Bgr, Byte>(new Bitmap(refImg));
Image<Bgr, Byte> CompImg = new Image<Bgr, Byte>(new Bitmap(compImg));
Image<Bgr, Byte> Difference; //Difference 
double Threshold = 5;

Difference = RefImg.AbsDiff(CompImg);
Difference = Difference.ThresholdBinary(new Bgr(Threshold, Threshold, Threshold), new Bgr(0, 255, 0)); 
Image RefImg=新图像(新位图(RefImg));
Image CompImg=新图像(新位图(CompImg));
图像差异//差别
双阈值=5;
差值=参考绝对差值(CompImg);
差值=差值。阈值二进制(新的Bgr(阈值,阈值,阈值),新的Bgr(0,255,0));

使用Abs diff允许您查找差异,但由于绝对值运算符的原因,无法找到符号。 要找到更大和更低的像素值,必须使用cmp函数

Image<Bgr, Byte> RefImg = new Image<Bgr, Byte>(...);
Image<Bgr, Byte> CompImg = new Image<Bgr, Byte>(...);

//Convert to gray levels or split channels
Image<Gray, Byte> RefImgGray = RefImg.Convert<Gray, byte>();
Image<Gray, Byte> CompImgGray = CompImg.Convert<Gray, byte>();

//Compare image and build mask
Image<Gray, Byte> MaskDifferenceHigh = RefImgGray.Cmp(CompImgGray, CmpType.GreaterThan);
Image<Gray, Byte> MaskDifferenceLow = RefImgGray.Cmp(CompImgGray, CmpType.LessThan);

//Draw result
Image<Bgr, byte> result = RefImg.CopyBlank();
result.SetValue(new Bgr(Color.Red),MaskDifferenceHigh);
result.SetValue(new Bgr(Color.Green), MaskDifferenceLow);
Image RefImg=新图像(…);
图像压缩=新图像(…);
//转换为灰度或分割通道
Image refimgray=RefImg.Convert();
Image CompImgGray=CompImg.Convert();
//比较图像和构建遮罩
Image MaskDifferenceHigh=refimgray.Cmp(CompImgGray,CmpType.GreaterThan);
Image MaskDifferenceLow=refimgray.Cmp(CompImgGray,CmpType.LessThan);
//抽签结果
图像结果=RefImg.CopyBlank();
结果.设定值(新Bgr(颜色.红色),MaskDifferenceHigh);
结果.设置值(新的Bgr(颜色.绿色),MaskDifferenceLow);

希望有帮助。

是的,它确实帮助了我!非常感谢。我认为MaskDifferenceLow有一个打字错误,但是,你比较了同一张图片。