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);
}