www.pudn.com > GaitRsystem.rar > Labelcon.h


#include  
#include  
#include  
#include "queue.h" 
 
class PIXEL{ 
public: 
	int x ; 
	int y ; 
}; 
//单一连通区域 
BOOL  Labelcon(unsigned char *buffer, int width, int height); 
 
BOOL Labelcon(unsigned char *buffer,  int width, int height) 
{ 
	int *count; 
	int index=0,i=0,j=0; 
    int label[160][320]; 
  	for(i=0;i<160;i++) 
    	for(j=0;j<320;j++) 
 		   label[i][j]=0; 
		 
	count=(int *)malloc(2000); 
	Queue queue(1000); 
	PIXEL tmp, dtmp; 
	  
	for(i=1;i=1&&dtmp.y>=1) 
					{ 
						if(*(buffer+(dtmp.x-1)*width+dtmp.y-1)==255&&label[dtmp.x-1][dtmp.y-1]==0) 
						{ 
							tmp.x=dtmp.x-1; 
							tmp.y=dtmp.y-1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
						if(*(buffer+(dtmp.x-1)*width+dtmp.y)==255&&label[dtmp.x-1][dtmp.y]==0) 
						{ 
							tmp.x=dtmp.x-1; 
							tmp.y=dtmp.y; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index ; 
						} 
						if(*(buffer+(dtmp.x-1)*width+dtmp.y+1)==255&&label[dtmp.x-1][dtmp.y+1]==0) 
						{ 
							tmp.x=dtmp.x-1; 
							tmp.y=dtmp.y+1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
						if(*(buffer+dtmp.x*width+dtmp.y-1)==255&&label[dtmp.x][dtmp.y-1]==0) 
						{ 
							tmp.x=dtmp.x; 
							tmp.y=dtmp.y-1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						}	 
						if(*(buffer+dtmp.x*width+dtmp.y+1)==255&&label[dtmp.x][dtmp.y+1]==0) 
						{ 
							tmp.x=dtmp.x; 
							tmp.y=dtmp.y+1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
						if(*(buffer+(dtmp.x+1)*width+dtmp.y)==255&&label[dtmp.x+1][dtmp.y]==0) 
						{ 
							tmp.x=dtmp.x+1; 
							tmp.y=dtmp.y; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
						if(*(buffer+(dtmp.x+1)*width+dtmp.y-1)==255&&label[dtmp.x+1][dtmp.y-1]==0) 
						{ 
							tmp.x=dtmp.x+1; 
							tmp.y=dtmp.y-1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
						if(*(buffer+(dtmp.x+1)*width+dtmp.y+1)==255&&label[dtmp.x+1][dtmp.y+1]==0) 
						{ 
							tmp.x=dtmp.x+1; 
							tmp.y=dtmp.y+1; 
							queue.Add(tmp); 
							label[tmp.x][tmp.y]=index; 
						} 
					} 
				} 
			} 
		}  
			 
		for(i=0;i<=index;i++) 
			count[i]=0; 
			 
		//统计 
		for(i=0;imax) 
			{ 
				max=count[i]; 
				maxindex=i; 
			} 
		} 
		//人体区域 
		for(i=0;i