使用emgu

时间:2017-08-30 16:07:16

标签: c# emgucv

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

1 个答案:

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

希望它有所帮助。