我目前正在开发一个项目,在该项目中,我需要编写软件来比较由相同区域组成的两幅图像,并绘制出围绕差异的框。我在几个小时内用c#.net编写了程序,但很快就意识到运行成本非常昂贵。下面是我实现它中的步骤。比较图像并标注差异c#
创建存储在x,每个像素的y坐标和与宽度,高度,x和y属性一起存储像素的列表的PixelRectangle类的像素类。
循环遍历每个图像的每个像素,比较每个对应像素的颜色。如果颜色不同,我然后用该像素的x,y坐标创建一个新的像素对象,并将其添加到pixelDifference List。
接下来我写了一个递归检查pixelDifference列表中每个像素的方法,以创建仅包含彼此直接相邻像素的PixelRectangle对象。 (很确定这个坏男孩造成了大部分的破坏,因为它给了我一个堆栈溢出错误。)
然后根据存储的像素计算矩形的x,y坐标和尺寸PixelRectangle对象的列表并在原始图像上绘制一个矩形以显示差异的位置。
我的问题是:我正在做这个正确的方法吗?四叉树会为这个项目保留任何价值吗?如果你可以给我关于这样的事情的基本步骤,我会很感激。提前致谢。
- Dave。
只是一个tought,但这些图像如何看实际字节?如果他们对一个像素或者甚至一个像素使用一定数量的字节,则可以检查实际文件本身的差异,而不必逐像素地分析图像。再次,我甚至不确定是否是这种情况,只是一个想法。 – aevitas
当你说差异时,你的意思是个别像素是不同的? 'LockBits'可以帮助我看到 – Sayse
为什么不显示匹配灰度和红色差异? – Paparazzi