c# - 通过矩形显示图像差异

标签 c# image image-processing aforge

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

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

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

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

但是,第一张照片(带有两个黄色矩形的 Rose)才是我真正想要的,上面链接中的代码告诉您所有匹配项而不是差异项。我实际上想找到差异并围绕差异突出显示/绘制矩形。

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

关于我可以在这里使用哪些类/函数的任何输入?

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

问候, 鲁米特

最佳答案

如果我对您的问题的理解正确,请告诉我:您想比较两张图片,如果它们之间存在差异,则通过在其周围绘制矩形来显示差异。

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

假设两张图片大小相同,可以使用简单的循环得到不同像素的坐标:

//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
        }
    }
}

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

恐怕使用 GetPixel() 会很慢。如果您追求速度,那么我建议使用 LockBits()UnlockBits() 进行像素操作(参见 MSDN Library )。

关于c# - 通过矩形显示图像差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16492291/

相关文章:

image - Coldfusion CFHTTP 问题与间接图像 URL

python - 根据像素颜色的函数更改像素颜色

c# - Linq to XML - 尝试打印无穷大符号

c# - 根据连接字符串判断是否存在 SQL Server CE 4.0 数据库文件

c# - 运行时优化 C# -> MySQL

c# - 通过下载链接将 Razor 组件保存为 JPG/PNG/PDF

c# - 将一个模型类与另一个 C# 进行比较

python - 在 python 3 上使用 tkinter 打开图像

image-processing - 将图像量化为 8 级灰度

matlab - 检测青光眼照片中的椭圆