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;i max) { max=count[i]; maxindex=i; } } //人体区域 for(i=0;i