C# 通过矩形显示图像差异
我是图像处理的新手。所以我可能在问一个noob问题 我使用的是VS2010、.NET4和Windows应用程序 我想通过矩形(或任何其他形状)显示两个图像之间的差异。 我试图在下面的链接中引用这个类 然而,第一张照片(两个耶洛矩形的罗斯)是我真正想要的,上面链接中的代码告诉你所有东西的匹配,而不是区别。实际上,我想找出差异,并围绕差异突出显示/绘制矩形 我在一个大型库中也尝试了C# 通过矩形显示图像差异,c#,image,image-processing,aforge,C#,Image,Image Processing,Aforge,我是图像处理的新手。所以我可能在问一个noob问题 我使用的是VS2010、.NET4和Windows应用程序 我想通过矩形(或任何其他形状)显示两个图像之间的差异。 我试图在下面的链接中引用这个类 然而,第一张照片(两个耶洛矩形的罗斯)是我真正想要的,上面链接中的代码告诉你所有东西的匹配,而不是区别。实际上,我想找出差异,并围绕差异突出显示/绘制矩形 我在一个大型库中也尝试了差异和阈值差异类,但是我可以创建一个新的图像来显示差异,但是,我想围绕这些差异绘制矩形。我不知道如何得到绘制矩形的不同
差异
和阈值差异
类,但是我可以创建一个新的图像来显示差异,但是,我想围绕这些差异绘制矩形。我不知道如何得到绘制矩形的不同点的坐标
我可以在这里使用哪些类/函数
我尝试过EyeOpen库,但它没有很多选择,除非我在这里遗漏了什么。除了C#中的org.Net之外,我可以尝试其他任何库
问候,,
Rumit让我知道我是否正确理解了你的问题:你想比较两个图像,如果它们之间存在差异,那么在其周围画一个矩形来显示差异 如果这是您试图实现的唯一目标,那么我将不使用任何外部库,而是逐像素比较图像,然后在不匹配的区域周围绘制一个矩形 假设两幅图像大小相同,可以使用简单的循环获得不同像素的坐标:
//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
}
}
}
//图像加载到位图image1、image2中;
对于(int x=0;x
然后使用DrawRectangle()
在posX
和posY
指定的像素周围绘制一个矩形。若你们想检测所有的差异,你们可以创建一个像素坐标数组,每次你们发现一个差异的时候都要添加一个项目,然后在所有的差异周围画一个矩形
恐怕使用GetPixel()
的速度相当慢。如果您的目标是速度,那么我建议使用LockBits()
和UnlockBits()
进行像素操作(请参阅)。我给出了一个答案,其中突出显示了两幅图像之间的增量
在转到外部库之前,我尝试过这种方法,但在上面的方法中,很难确定绘制矩形的区域。例如,在我的原始帖子中的链接中有一幅带有两个直肠的玫瑰图片。如果我一个像素一个像素地画,很难决定在哪里画矩形。如果我遗漏了什么,请告诉我?我正在寻找一个应用程序,它将发现多个差异,并强调相同的@鲁米特帕特尔:很抱歉,我还是不明白你想要实现什么。如果是,那就是将图像与某个模板进行比较,并突出显示匹配区域,然后使用问题中发布的链接中编写的确切代码。如果是发现,那么你可以使用我的答案中的代码或者其他一些差分技术。你可能还想在一张图像中找出一些区域差异并进行比较,但我不认为这有什么用处。你到底打算如何围绕这些差异绘制矩形?考虑差值的几乎微不足道的情况,在45度处画一条线。您想要一个包含所有更改的矩形吗?或者,每一个小小的像素变化都有一个小小的矩形?