如何用VC++6.0的MFC做图像找不同?
大三GIS菜狗一只,老师给的课题是用VC的MFC找出两张相近图片的不同处,在MFC的视图中展示两张图片并标记处不同的地方。因为图像是栅格图像,对于点要素还是好找的,线要素我想用边缘检测算法提取线,然后再做处理,面要素应该也比较好找。
大体思路我有了,原图是两张png格式的图片,因为VC对图片的处理能力比较差,所以我下载了GDI+,加入到我的库里面,但是发现还是用不了CImage类,于是我就两张png图片转成两张bmp格式的图片,想通过对位图的操作来继续进行。
我的思路如下:
(1)通过位图操作获得两张图片的像素点的颜色矩阵
(2)比较每一个像素点的颜色,一样返回0,不一样返回1,得到一个矩阵(因为原始图像是比较严格的工程数据,不用担心会有杂色什么的),得到所有为1的值的像素点的坐标,存在一个动态数组中。
(3)通过一定的算法,将(2)中得到的坐标进行区域融合,比如说老图中某处有一个房子,而新图中没有,那么差异不可能只是一个像素点,而是一系列位置相近的像素点。一群位置相近的像素点的集合成为一个要素,点、线、面要素是通过不同的算法来进行区域融合的。
(4)计算出每一个要素的中心点,以这个中心店为圆心画圆,也就是把这个不同的地方标记出来。
我想难点在于(3)中的区域融合算法
只是我才开始使用MFC,对位图的操作不太熟悉,如何得到位图的像素点的颜色矩阵并且存放在一个二维数组Color cl[][]中,想询问一下这里的大牛们,谢谢!!!