2017-08-30 151 views
0

我在C#中编码,我需要两个图像之间的差异帮助。我正在使用emgu来帮助我完成这个部分。这里的问题是,只要像素中存在差异,它就会显示在结果图像中。使用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)); 

回答

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); 

希望它有帮助。

+0

是的,它帮助我!非常感谢。我认为MaskDifferenceLow存在拼写错误,但您比较了相同的图像。 – Snooze