我的目的是把一个二值图像(背景白色、前景黑色)的所有连通的前景、背景找出来,即连通的白色区域和连通的黑色区域都要给出个数和大小等信息,如果能绘出指定的连通图最好,所有象素点的信息都存在一个BYTE型数组里(只有0和255两种数据)。应用的算法就是图的遍历,我写了个算法,用一个数据结构来存储每个点的信息,包括:当前点是否被访问过、当前点的颜色、当前点的坐标,从第一个象素点开始遍历,碰到没有访问过的点时,就把那个点加到队列中,然后操作队列,查询队头所代表的点的8个(或4个)临域点,如果有临域点没有被访问过,就把它加到队列,队头的所有临域点都查询完毕后就删除队头。这个过程相当于广度遍历一个图结构,到最后循环结束时就遍历完一个连通的区域。我的想法就是这样的,但是运算的时候却产生了非常大的误差,我自己做了个图,只有一条黑色直线,这样就只有一个前景连通图和一个背景连通图,但是程序还是无法运算正确,真是不知道哪里错了,各位图像处理高手,麻烦给个可行的算法,感激不尽,我已经困惑了很长时间了。

解决方案 »

  1.   

    1.用内存dc,把你的图贴入,调用floodfill,用自己定义的颜色序列填充好,然后选择下一个点,用下个颜色继续floodfill,直到找不到未被填充的点.根据颜色,统计连通区域
    2.队列.
      定义一个二维数组来标记整个图,初始为-1
      定义一个标记元素int iMark=-1;
      1.iMark++
      2.选取第一未被访问的点,未找到,跳到5,找到,跳到3
      3.从考查他的八领域是否有颜色与之相同的未被标记的点,有将它选入队列.用该标记元素iMark标记该点
      4.队列是否为空,是跳到1,否则取出该点,跳到3
      5.结束