zoukankan      html  css  js  c++  java
  • 连通域去噪

    /* 漫水法填充标定实现
    copy from: http://blog.csdn.net/zhjx2314/article/details/1629702
    */

    写好的去噪,想优化一下代码,结果去噪那部分丢了。。。有空再重写吧

    floodfill(Mat &src)
    {    
        struct Seed{
            int x;
            int y;
        };
    
        class mPoint{
        public:
            mPoint(int xx, int  yy, int mflag)
            {
                x = xx;
                y = yy;
                flag = mflag;
            }
        public:
            int x;
            int y;
            int flag;
        };
    
    
        int Row = src.rows;
        int Col = src.cols;
    
        int flag = 30;
    
        Seed *Seeds;
        int StackPoint;
    
        int pixe;
    
        //当前像素位置  
        int curx, cury;
    
        //分配种子空间   
        Seeds = new Seed[Row*Col];
    
        //计算每个标定值的像素个数  
        int count[251];
        for (int i = 0; i < 252; i++)
        {
            count[i] = 0; //初始化为0  
        }
    
        uchar *p = src.data;
        for (int i = 0; i < src.rows; i++)
        {
            for (int j = 0; j < src.cols; j++)
            {
    
                if (*(p + i*src.cols + j) == 0)
                {
                    Seeds[1].x = j;
                    Seeds[1].y = i;
                    StackPoint = 1;
    
                    while (StackPoint != 0)
                    {
                        curx = Seeds[StackPoint].x;
                        cury = Seeds[StackPoint].y;
                        StackPoint--;
    
                        //取当前指针所处的像素值
                        pixe = *(p + cury*Col + curx);
    
                        //将指针所处的像素标定
                        *(p + cury*Col + curx) = flag;
                        count[flag]++;
    
                        //判断左面的点,如果为黑,则压入堆栈  
                        //注意防止越界  
                        if (curx > 0)
                        {
                            pixe = *(p + cury*Col + curx - 1);
                            if (pixe == 0)
                            {
                                StackPoint++;
                                Seeds[StackPoint].x = curx - 1;
                                Seeds[StackPoint].y = cury;
                            }
                        }
    
                        //判断右面的点,如果为黑,则压入堆栈  
                        //注意防止越界  
                        if (curx < Col)
                        {
                            pixe = *(p + cury*Col + curx + 1);
                            if (pixe == 0)
                            {
                                StackPoint++;
                                Seeds[StackPoint].x = curx + 1;
                                Seeds[StackPoint].y = cury;
                            }
                        }
    
                        //判断上面的点,如果为黑,则压入堆栈  
                        //注意防止越界  
                        if (cury > 0)
                        {
                            pixe = *(p + (cury - 1)*Col + curx);
                            if (pixe == 0)
                            {
                                StackPoint++;
                                Seeds[StackPoint].x = curx;
                                Seeds[StackPoint].y = cury - 1;
                            }
                        }
    
                        //判断下面的点,如果为黑,则压入堆栈  
                        //注意防止越界 
                        if (cury < Row)
                        {
                            pixe = *(p + (cury + 1)*Col + curx);
                            if (pixe == 0)
                            {
                                StackPoint++;
                                Seeds[StackPoint].x = curx;
                                Seeds[StackPoint].y = cury + 1;
                            }
    
                        }
    
                    }//end while( StackPoint != 0)  
    
                    flag = (flag + 7) % 251;//改变标定值
    
                }//end if
            }//end for(i 
        }//end for(j  
    
        //释放堆栈  
        delete Seeds;
    
    }
  • 相关阅读:
    Drupal 学习笔记 (4)
    property和field有什么区别
    Razor4Orchard v1.2
    Mono喜迁新家http://www.xamarin.com/
    jq中获取属性名的方法
    jquery中的文档操作之五
    PHP基础知识之三
    php基础知识之一
    注意点
    jquery中ajax的学习之$.ajax()
  • 原文地址:https://www.cnblogs.com/iRoad/p/4194146.html
Copyright © 2011-2022 走看看