【问题标题】:Difference between two images using emgu使用emgu的两个图像之间的差异
【发布时间】:2017-09-18 15:53:15
【问题描述】:

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

【问题讨论】:

    标签: c# emgucv


    【解决方案1】:

    由于绝对值运算符,使用 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 有一个错字,但您比较的是同一张图片。
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多