|
不明白下面这段程序,哪位高抬贵手指点一二。大概的过程或者原理,都可以。跪谢。
//图像分割 (源图像, 区域数, 各个区域的起始结束坐标) 逐行像素扫描
void IMG_segmentation(const unsigned char *SourceImage, char *AreaNum, unsigned int *Coord)
{
unsigned int x, y, i, j;
unsigned char gray = 0, oldgray = 0;
char line = 0;
unsigned int updown[100];
char num = 0;
x = (SourceImage[2] << 8) + SourceImage[1]; //一行的像素数
y = (SourceImage[4] << 8) + SourceImage[3]; //一列的像素数
for(i=5; i<y-6; i++)
{
for(j=5; j<x-6; j++)
{
GetPixelValue(SourceImage, j, i, &gray);
if(gray == 0)
break;
}
if((oldgray == 0xff) && (gray == 0))
{
updown[line] = i; //y坐标 上端
line++;
}
if((oldgray == 0) && (gray == 0xff))
{
updown[line] = i; //y坐标 下端
line++;
}
oldgray = gray;
}
for(; line>=0; line=line-2)
{
for(i=5; i<x-6; i++)
{
for(j=updown[line-2]; j<updown[line-1]; j++)
{
GetPixelValue(SourceImage, i, j, &gray); //总在这个位置跑死,谁能帮帮我
if(gray == 0)
break;
}
if((oldgray == 0xff) && (gray == 0))
{
Coord[num*4] = i; //区域的起始x坐标
Coord[num*4+1] = updown[line-2]; //区域的起始y坐标
}
if((oldgray == 0) && (gray == 0xff))
{
Coord[num*4+2] = i; //区域的结束x坐标
Coord[num*4+3] = updown[line-1]; //区域的结束y坐标
num++;
}
oldgray = gray;
}
}
*AreaNum = num;
}
|
|