关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮助
#include <stdio.h>#include "Params.h"
/*标签化,是指对图像中互相连通的所有像素(连接成分)赋予同样的标签号,
而对于不同的连接成分则给予不同的标号的处理*/
#define L_BASE 100 /* 连接成分标号的基本值*/
void labelset(unsigned char image[Y_SIZE][X_SIZE], int xs,int ys, int label);
/* labeling 给图像贴标签
image_in: 输入图像数组(二值图像)
image_label: 输出图像数组(标号化的图像)
cnt: 标签的个数
buf: 缓冲区 */
int labeling(unsigned char image_in[Y_SIZE][X_SIZE],
unsigned char image_label[Y_SIZE][X_SIZE],int *cnt,char *buf)
{
int i,j,label;
for(i=0;i<Y_SIZE;i++)
for(j=0;j<X_SIZE;j++)
image_label[i][j]=image_in[i][j];
label=L_BASE;
for(i=0;i<Y_SIZE;i++)
for(j=0;j<X_SIZE;j++){
if(image_label[i][j]==HIGH){
if(label>=HIGH){
sprintf(buf,"--Error! too many labels.\n");
return -1;
}
labelset(image_label,j,i,label);label++;
}
}
*cnt=label-L_BASE;
sprintf(buf," number of labels;%d\n",*cnt);
return 0;
}
/* labelset 把互连的像素都贴上标签号码
image: 图像数组
xs,ys: 开始位置
label: 标签序号 */
void labelset(unsigned char image[Y_SIZE][X_SIZE], int xs,int ys, int label)
{
int i,j,cnt,im,ip,jm,jp;
image[ys][xs]=label;
for(;;){
cnt=0;
for(i=0;i<Y_SIZE;i++)
for(j=0;j<X_SIZE;j++)
if(image[i][j]==label){
im=i-1;ip=i+1;jm=j-1;jp=j+1;
if(im<0)im=0;if(ip>Y_SIZE-1)ip=Y_SIZE-1;
if(jm<0)im=0;if(jp>X_SIZE-1)ip=X_SIZE-1;
if(image[i ][jp]==HIGH) {
image[i ][jp]==label;cnt++;
}
if(image[im][jp]==HIGH) {
image[im][jp]==label;cnt++;
}
if(image[i ][j ]==HIGH){
image[i ][j ]==label;cnt++;
}
if(image[im][jm]==HIGH){
image[im][jm]==label;cnt++;
}
if(image[i ][jm]==HIGH){
image[i ][jm]==label;cnt++;
}
if(image[ip][jm]==HIGH){
image[ip][jm]==label;cnt++;
}
if(image[ip][j ]==HIGH){
image[ip][j ]==label;cnt++;
}
if(image[ip][jp]==HIGH){
image[ip][jp]==label;cnt++;
}
}
if(cnt==0)break;
}
}
想问一下调用的函数labelset,这个是不是死循环了for(;;)后面这句条件if(cnt==0)break;是不是也有问题啊?