通过矩形显示图像差异

问题描述 投票:2回答:2

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

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

我想通过矩形(或任何其他形状)来显示两幅图像之间的差异。我试图参考下面链接中的类。

http:/www.aforgenet.comframeworkfeaturestemplate_matching.html

然而,我真正想要的是第一张照片(Rose与两个yello矩形的照片),上面链接中的代码告诉你所有东西都匹配,而不是差异。其实我是想找到差异,并在差异周围高亮绘制矩形。

我尝试了 DifferenceThresholdedDifference 类,但我可以创建一个新的图像,它只是显示差异,但是,我想在这些差异周围绘制矩形。我不知道如何得到坐标为differneces绘制矩形?

有任何关于我可以在这里使用什么类函数的意见吗?

我试过EyeOpen库,但是和Aforge相比,它没有很多选项,除非我在这里遗漏了什么。除了Aforge.Net之外,我还可以在C#中尝试任何其他库。

谢谢,Rumit

c# image image-processing aforge
2个回答
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
        }
    }
}

然后你只需要在这个像素周围画一个矩形,这个矩形是由 posXposY 使用 DrawRectangle(). 如果你想检测所有的差异,你可以创建一个像素坐标数组,每当你发现一个差异的时候,就往里面添加项目,然后在所有的项目周围画上矩形。

我担心使用 GetPixel() 是相当慢的。如果你的目标是速度,那么我建议使用 LockBits()UnlockBits() 用于像素操作(见 MSDN图书馆).


0
投票

我发布了一个答案 此处突出了两幅图像之间的三角关系。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.