通过矩形显示图像差异

时间:2013-05-10 23:44:40

标签: c# image image-processing aforge

我是图像处理的新手。所以我可能会在这里问一个noob问题。

我在VS2010,.Net 4,Windows应用程序。

我想通过矩形(或任何其他形状)显示两个图像之间的差异。 我试着在下面的链接中引用该课程。

http://www.aforgenet.com/framework/features/template_matching.html

然而,第一张照片(玫瑰有两个黄色矩形)是我真正想要的,上面链接中的代码告诉你所有的东西匹配而不是差异。我实际上想要找出差异并突出显示/绘制差异。

我在AForge库中尝试了DifferenceThresholdedDifference类,但是我可以创建一个只显示差异的新图像,但是,我想围绕这些差异绘制矩形。我不知道如何获得不同的坐标来绘制矩形?

我可以在这里使用什么类/功能的任何输入?

我已经尝试过EyeOpen库,但与Aforge相比它没有很多选项,除非我在这里遗漏任何东西。我可以在C#中尝试除Aforge.Net之外的任何其他库。

此致 Rumit

2 个答案:

答案 0 :(得分:4)

如果我理解你的问题,请告诉我:你想比较两个图像,如果它们之间存在差异,那么通过在它周围绘制矩形来显示这种差异。

如果这是你想要实现的唯一的东西,那么我不会使用任何外部库,而是我只是逐个像素地比较图像,然后围绕不匹配的区域绘制一个矩形。

假设两个图像的大小相同,您可以使用简单的循环来获取不同像素的坐标:

//the images are loaded in Bitmap image1, image2;
for (int x = 0; x < image1.Width; x++)
{
    for (int y = 0; y < image1.Height; y++)
    {
        if (image1.GetPixel(x, y) != image2.GetPixel(x, y))
        {
            posX = x; posY = y; //position of the pixel that is different
        }
    }
}

然后,您只需使用posXposYDrawRectangle()指定的像素周围绘制一个矩形。如果要检测所有差异,可以创建一个像素坐标数组,每次发现差异时都会向其添加项目,然后在所有差异周围绘制矩形。

我担心使用GetPixel()非常慢。如果您的目标是速度,那么我建议您使用LockBits()UnlockBits()进行像素操作(请参阅MSDN Library)。

答案 1 :(得分:0)

我发布了一个答案here,突出显示了两个图像之间的差异。

enter image description here