⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thinning.cpp

📁 用于系统跟踪的程序
💻 CPP
字号:

#include "stdafx.h"
#include "cv.h"
  /*
   程序:图像细化
   作者:sboom(Lingch)
   日期:05年1月18日
   */
void xxx(IplImage* img)
{
	int i,j,k,l,wc,pos;
	unsigned char color=0;
	int N=img->width*img->height;
	int flag=1;
	long x,b;
	unsigned char *om=new unsigned char[N]; //标记矩阵
  unsigned char *image=new unsigned char[N];
	for(i=0;i<N;i++) //初始化
	{
		om[i]=0;
  	image[i]=(*(img->imageData+(i)));
	}
	 
	while(flag==1) //flag=0时迭代结束
	{
		flag=0;
		for( i=2;i<img->height-2;i++)
		{
			for(j=2;j<img->width-2;j++)
			{
			//模板a
				if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
					&& image[(i-1)*(bmpi->width+skip)+j+1]==0
					&& image[(i)*(bmpi->width+skip)+j-1]==0xff
					&& image[(i)*(bmpi->width+skip)+j-0]==0
					&& image[(i)*(bmpi->width+skip)+j+1]==0
					&& image[(i)*(bmpi->width+skip)+j+2]==0
					&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
					&& image[(i+1)*(bmpi->width+skip)+j+1]==0)
  			{
  				om[(i)*(bmpi->width+skip)+j]=0xff;
  				flag=1;
  				continue;
  			}
			//模板b
			if(image[(i-1)*(bmpi->width+skip)+j-0]==0
				&& image[(i-1)*(bmpi->width+skip)+j+1]==0
				&& image[(i)*(bmpi->width+skip)+j-1]==0xff
				&& image[(i)*(bmpi->width+skip)+j-0]==0
				&& image[(i)*(bmpi->width+skip)+j+1]==0
				&& image[(i)*(bmpi->width+skip)+j+2]==0
				&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff)
  		{
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			 continue;
  		}
			 //模板c
			 if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
				 && image[(i-1)*(bmpi->width+skip)+j-0]==0xff
				 && image[(i)*(bmpi->width+skip)+j-1]==0xff
				 && image[(i)*(bmpi->width+skip)+j-0]==0
				 && image[(i)*(bmpi->width+skip)+j+1]==0
				 && image[(i)*(bmpi->width+skip)+j+2]==0
				 && image[(i+1)*(bmpi->width+skip)+j-0]==0
				 && image[(i+1)*(bmpi->width+skip)+j+1]==0)
			 {
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			 continue;
  		}
			 //模板d
			 if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
				 && image[(i-1)*(bmpi->width+skip)+j-0]==0xff
				 && image[(i-1)*(bmpi->width+skip)+j+1]==0xff
				 && image[(i)*(bmpi->width+skip)+j-0]==0
				 && image[(i+1)*(bmpi->width+skip)+j-1]==0
				 && image[(i+1)*(bmpi->width+skip)+j-0]==0
				 && image[(i+1)*(bmpi->width+skip)+j+1]==0)
  		{
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			 continue;
  		}
			 //模板e
			 if(image[(i-1)*(bmpi->width+skip)+j-1]==0
				 && image[(i-1)*(bmpi->width+skip)+j+1]==0xff
				 && image[(i)*(bmpi->width+skip)+j-1]==0
				 && image[(i)*(bmpi->width+skip)+j-0]==0
				 && image[(i)*(bmpi->width+skip)+j+1]==0xff
				 && image[(i+1)*(bmpi->width+skip)+j-1]==0
				 && image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
  		{
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			 continue;
  		}
			//模板f
			if(image[(i-1)*(bmpi->width+skip)+j-0]==0
				&& image[(i)*(bmpi->width+skip)+j-1]==0
				&& image[(i)*(bmpi->width+skip)+j-0]==0
				&& image[(i)*(bmpi->width+skip)+j+1]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
  		{
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			continue;
  		}
			//模板g
			if(image[(i-1)*(bmpi->width+skip)+j-0]==0xff
				&& image[(i-1)*(bmpi->width+skip)+j+1]==0xff
				&& image[(i)*(bmpi->width+skip)+j-1]==0
				&& image[(i)*(bmpi->width+skip)+j-0]==0
				&& image[(i)*(bmpi->width+skip)+j+1]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j-0]==0)
  		{
  			 om[(i)*(bmpi->width+skip)+j]=0xff;
  			 flag=1;
  			 continue;
  		 }
			//模板h
			if(image[(i-2)*(bmpi->width+skip)+j-0]==0
				&& image[(i-1)*(bmpi->width+skip)+j-1]==0
				&& image[(i-1)*(bmpi->width+skip)+j-0]==0
				&& image[(i-1)*(bmpi->width+skip)+j+1]==0
				&& image[(i)*(bmpi->width+skip)+j-0]==0
				&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff
				&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
  		{
				 om[(i)*(bmpi->width+skip)+j]=0xff;
				 flag=1;
				 continue;
  		}
  	 }
   }
   for(i=0;i<N;i++)
   {
   if(om[i]==0xff)
   {
   image[i]=0xff;
   }
   }
   }
   //-------------第二次串行细化
   for( i=2;i<bmpi->height-2;i++)
   {
   for(j=2;j<bmpi->width-2;j++)
   {
   //缩小后的模板a
   if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
   && image[(i-1)*(bmpi->width+skip)+j+1]==0
   && image[(i)*(bmpi->width+skip)+j-1]==0xff
   && image[(i)*(bmpi->width+skip)+j-0]==0
   && image[(i)*(bmpi->width+skip)+j+1]==0
   && image[(i+1)*(bmpi->width+skip)+j-1]==0xff
   && image[(i+1)*(bmpi->width+skip)+j+1]==0)
   {
   image[(i)*(bmpi->width+skip)+j]=0xff;
   flag=1;
   continue;
   }
   //缩小后的模板h
   if(image[(i-1)*(bmpi->width+skip)+j-1]==0
   && image[(i-1)*(bmpi->width+skip)+j-0]==0
   && image[(i-1)*(bmpi->width+skip)+j+1]==0
   && image[(i)*(bmpi->width+skip)+j-0]==0
   && image[(i+1)*(bmpi->width+skip)+j-1]==0xff
   && image[(i+1)*(bmpi->width+skip)+j-0]==0xff
   && image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
   {
   image[(i)*(bmpi->width+skip)+j]=0xff;
   flag=1;
   continue;
   }
   }
   }
   //---------------显示图形
   for( i=0;i<bmpi->height;i++)
   {
   for(j=0;j<bmpi->width;j++)
   {
   //-----原始图形
   color=image[(i)*(bmpi->width+skip)+j];
   tc=SwitchColor(color,color,color);
   Form1->Canvas->Pixels[10+j][400-i]=*tc;
   }
   }
   //----------关闭文件
   fclose(f);
  }
  //------------------------------------------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -