www.pudn.com > segmentaion.rar > labelFusion.cpp


int LabelFusion(CvMat* LabelImage0,CvMat* LabelImage1,CvMat* LabelImage2,int width, int height, CvMat* LabelImage) 
{ 
	unsigned char* BW=0; 
	int num_elements=width*height; 
	int neighbor[4]; 
	int qq; 
	queue que; 
 
    for (int p = 0; p < num_elements; p++) 
	{ 
        BW[p] = 0; 
		LabelImage->data.i[p]=0; 
	} 
	int totalNum=0; 
 
	for (int p = 0; p < num_elements; p++) 
    { 
		if (BW[p]==0) 
		{ 
			totalNum++; 
			que.push(p); 
			BW[p]=1; 
			LabelImage->data.i[p]=totalNum; 
			 
			while (!(que.empty())) 
			{ 
				qq=que.front(); 
				que.pop(); 
				getFourNeighbor(p, width, height, neighbor); 
				for (int i = 0; i <4; i++) 
				{ 
					if (neighbor[i]!=-1 || 
						LabelImage0->data.i[qq]==LabelImage0->data.i[neighbor[i]] || 
						LabelImage1->data.i[qq]==LabelImage1->data.i[neighbor[i]] || 
						LabelImage2->data.i[qq]==LabelImage2->data.i[neighbor[i]]) 
 
					{ 
						que.push(neighbor[i]); 
						BW[neighbor[i]]=1; 
						LabelImage->data.i[neighbor[i]]=totalNum; 
					} 
				} 
			} 
		} 
	} 
	return(totalNum); 
}