zoukankan      html  css  js  c++  java
  • 图像周长

    writen by wqj1212@yahoo.com.cn

    void  Cbiaoji1::zhouchang(IplImage *src)
    {
        IplImage 
    *imgZhouchang=NULL;
     biaoji(src);
     imgZhouchang
    =cvCreateImage(cvSize(src->width,src->height),8,1);
     
    for(int j=0;j<imgZhouchang->height;j++)
            
    for(int i=0;i<imgZhouchang->width;i++)
            
    {
                CV_IMAGE_ELEM(imgZhouchang,uchar,j,i)
    =255;
            }

     
    long pixel;
     
    bool bFindStartPoint;
     
    bool bFindPoint;
     CvPoint StartPoint,CurrentPoint;
     
    int Direction[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};
     
    int BeginDirect;
     
    for(int t=1;t<=x_sign;t++)
     
    {
         
    if(flag[t]!=0)
         
    {
             bFindStartPoint
    =false;
             
    for(int j=0;j<src->height && !bFindStartPoint;j++)
             
    {
                 
    for(int i=0;i<src->width && !bFindStartPoint;i++)
                    
                 
    {
                     
    if(CV_IMAGE_ELEM(temp,uchar,j,i)==t)
                     
    {
                         bFindStartPoint
    =TRUE;
                         StartPoint.y
    =j;
                         StartPoint.x
    =i;
                         CV_IMAGE_ELEM(imgZhouchang,uchar,j,i)
    =t;
                     }

                 }

             }

             BeginDirect
    =0;
             bFindStartPoint
    =false;
             CurrentPoint.y
    =StartPoint.y;
             CurrentPoint.x
    =StartPoint.x;
             
    while(!bFindStartPoint)
             
    {
                 bFindPoint
    =false;
                 
    while(!bFindPoint)
                 
    {
                     pixel
    =CV_IMAGE_ELEM(temp,uchar,CurrentPoint.y+Direction[BeginDirect][1],CurrentPoint.x+Direction[BeginDirect][0]);
                    
                     
    if(pixel==t)
                     
    {
                         bFindPoint
    =true;
                         CurrentPoint.y
    =CurrentPoint.y+Direction[BeginDirect][1];
                         CurrentPoint.x
    =CurrentPoint.x+Direction[BeginDirect][0];
                         
    if(CurrentPoint.y==StartPoint.y && CurrentPoint.x==StartPoint.x)
                         
    {
                             bFindStartPoint
    =true;
                         }

                         CV_IMAGE_ELEM(imgZhouchang,uchar,CurrentPoint.y,CurrentPoint.x)
    =t;
                         BeginDirect
    --;
                         
    if(BeginDirect==-1)
                             BeginDirect
    =7;
                         BeginDirect
    --;
                         
    if(BeginDirect==-1)
                             BeginDirect
    =7;
                     }

                     
    else
                     
    {
                         BeginDirect
    ++;
                         
    if (BeginDirect==8)
                             BeginDirect
    =0;
                     }


                 }

             }


         }

         
     }

     
    int x_line=0;
    int fm[255]={0};
    memset(fm,
    0,255);
    for(j=0;j< imgZhouchang->height;j++)
    for(int i=0;i< imgZhouchang->width;i++)
    {
        
    if(CV_IMAGE_ELEM( imgZhouchang,uchar,j,i)!=0)
        
    {
            x_line
    =CV_IMAGE_ELEM( imgZhouchang,uchar,j,i);
            
    ++fm[x_line];
        }

    }

    memset(fn,
    0,255);
    int y_line=0;
    int m_line=0;
    for(int i=0;i<=x_sign;i++)
    {
        
    if(fm[i]!=0)
        
    {
            
    if(fn[y_line]==0)
            
    {
                fn[y_line]
    =fm[i];
                
    ++y_line;
            }

        }

        m_line
    +=fm[i];
    }

    cout
    <<"连通区域个数"<<y_line<<endl;
    cout
    <<"连通区域的总积"<<m_line<<endl;
    for(i=0;i<y_line;i++)
    {
        cout
    <<"连通区域:"<<i+1<<"该区域周长:"<<fn[i]<<endl;
    }

    cvCopy(imgZhouchang,src);
        cvReleaseImage(
    &temp);
            cvReleaseImage(
    &imgZhouchang);
     
    }
  • 相关阅读:
    模线性方程理解
    dp水题
    静态字典树模板
    KMPnext数组循环节理解 HDU1358
    layer开发随笔
    javascript时间格式转换
    ubuntu16创建开机启动服务
    es集群搭建
    mongodb集群搭建
    zookeeper集群搭建
  • 原文地址:https://www.cnblogs.com/wqj1212/p/1009664.html
Copyright © 2011-2022 走看看