使用emgu的两个图像之间的差异
问题描述:
我在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));
答
使用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);
希望它有帮助。
是的,它帮助我!非常感谢。我认为MaskDifferenceLow存在拼写错误,但您比较了相同的图像。 – Snooze