Opencv定义的图像细化函数

来源:互联网 发布:生死狙击免费刷枪软件 编辑:程序博客网 时间:2024/05/21 07:50

细化函数定义如下所示:

//对输入图像进行细化void ThinImage(IplImage* src, IplImage* dst, int iterations){ CvSize size = cvGetSize(src); cvCopy(src, dst);//拷贝一个数组给另一个数组    int n = 0,i = 0,j = 0; for(n=0; n<iterations; n++) {IplImage* t_image;  t_image = cvCloneImage(dst);  for(i=0; i<size.height;  i++)  {   for(int j=0; j<size.width; j++)   {    if(CV_IMAGE_ELEM(t_image,byte,i,j)==1)    {     int ap=0;     int p2 = (i==0)?0:CV_IMAGE_ELEM(t_image,byte, i-1, j);     int p3 = (i==0 || j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte, i-1, j+1);     if (p2==0 && p3==1)     {      ap++;     }     int p4 = (j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte,i,j+1);     if(p3==0 && p4==1)     {      ap++;     }     int p5 = (i==size.height-1 || j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j+1);     if(p4==0 && p5==1)     {      ap++;     }     int p6 = (i==size.height-1)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j);     if(p5==0 && p6==1)     {      ap++;     }     int p7 = (i==size.height-1 || j==0)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j-1);     if(p6==0 && p7==1)     {      ap++;     }     int p8 = (j==0)?0:CV_IMAGE_ELEM(t_image,byte,i,j-1);     if(p7==0 && p8==1)     {      ap++;     }     int p9 = (i==0 || j==0)?0:CV_IMAGE_ELEM(t_image,byte,i-1,j-1);     if(p8==0 && p9==1)     {      ap++;     }     if(p9==0 && p2==1)     {      ap++;     }     if((p2+p3+p4+p5+p6+p7+p8+p9)>1 && (p2+p3+p4+p5+p6+p7+p8+p9)<7)     {      if(ap==1)      {       if(p2*p4*p8==0)       {        if(p2*p6*p8==0)        {         CV_IMAGE_ELEM(dst, byte,i,j)=0;        }       }      }     }                        }   }  }              cvReleaseImage(&t_image);} //将二值图像转换成灰度,以便显示  i = 0;j = 0;  size = cvGetSize(dst); for(i=0; i<size.height;  i++) {  for(j=0; j<size.width; j++)  {   if(CV_IMAGE_ELEM(dst,uchar,i,j)==1)   {    CV_IMAGE_ELEM(dst,uchar,i,j) = 255;   }   else   {    CV_IMAGE_ELEM(dst,uchar,i,j) = 0;   }  } }}
左边是细化前图像,右边是细化之后图像