📄 binlabel.txt
字号:
//区域标记的程序,对大块区域有效 18:53 99/11/19
int i, j, k, l; // 常用循环变量
int Nowx, Nowy; // 当前的图像坐标位置
int PixelNum; // 记录递归的次数
int Neighbor; // 邻域点的个数
int AreaLabel= 1;// 标记的值
BYTE **S_RowAddress = new BYTE*[imgH]; //定义指向图像数据每行行首的地址,用来加快运算速度
BYTE GLabel; // 记录邻域中像素点的标记值
//给指向图像数据每行行首的地址赋值
S_RowAddress[0] = image;
for(i=1 ; i<imgH ;i++)
{
S_RowAddress[i] = S_RowAddress[i-1] + imgW;
}
BOOL GrassOk = false; //定义递归调用是否成功的标志位
for(i=0; i<imgW; i++)
{
for(j=0; j<imgH; j++)
{
// 如果是目标点,则继续,否则进行下一次循环
if(S_RowAddress[j][i] != TargetGray) continue;
//判断当前点邻域内是否有标记过的点
Neighbor = PixelNum = 0;
for(k=-1; k<=1; k++)
{
for(l=-1; l<=1; l++)
{
Nowx = i + k;
Nowy = j + l;
//防止指针越界
if( Nowx >= 0 && Nowx < imgW &&
Nowy >= 0 && Nowy < imgH &&
S_RowAddress[Nowy][Nowx] > 0 &&
S_RowAddress[Nowy][Nowx] < 255 )
{
// 如果该点的邻域有标记过的点,
// 则Neighbor加1,并将该标记值
// 记录在变量GLabel
GLabel = S_RowAddress[Nowy][Nowx];
Neighbor++;
}
}
}//*/
// 如果该点的邻域有标记过的点,
// 则仍然用该标记值从当前点开始进行标记
// 否则使用新的标记值
if(Neighbor)
{
GrassOk = Image_Binary_grass( S_RowAddress, imgW, imgH,
TargetGray, i, j, GLabel, PixelNum);
}
else//*/
{
px = i, py = j;
do
{
Neighbor = PixelNum = 0;
for(k=-1; k<=1; k++)
{
for(l=-1; l<=1; l++)
{
Nowx = px + k;
Nowy = py + l;
//防止指针越界
if( Nowx >= 0 && Nowx < imgW &&
Nowy >= 0 && Nowy < imgH &&
S_RowAddress[Nowy][Nowx] > 0 &&
S_RowAddress[Nowy][Nowx] < 255 )
{
// 如果该点的邻域有标记过的点,
// 则Neighbor加1,并将该标记值
// 记录在变量GLabel
GLabel = S_RowAddress[Nowy][Nowx];
Neighbor++;
}
}
}//*/
if( Neighbor )
GrassOk = Image_Binary_grass( S_RowAddress, imgW, imgH,
TargetGray, px, py, GLabel, PixelNum);
else
GrassOk = Image_Binary_grass( S_RowAddress, imgW, imgH,
TargetGray, px, py, AreaLabel, PixelNum);
//如果标记成功,则标记值加1
} while( !GrassOk );
//if(GrassOk)
if( GrassOk ) AreaLabel++;
}
// 如果标记的区域大于253个,返回
if(AreaLabel >= 255)
{
if(S_RowAddress!=NULL) delete []S_RowAddress;
return 254;
}
}
}
// 收回分配的内存
if(S_RowAddress!=NULL) delete []S_RowAddress;
// 返回标记的区域的数目
return AreaLabel == 1 ? GrassOk : AreaLabel - 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -