| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 872 人关注过本帖
标题:关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮助
取消只看楼主 加入收藏
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮助
#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;是不是也有问题啊?
搜索更多相关主题的帖子: include 缓冲区 标签 
2014-06-16 09:58
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 2 楼 砖家的谎言
这个文件有导入。我是自己该觉下面的那个for循环有问题。还有跳出语句if(cnt==0)break
2014-06-16 15:28
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 4 楼 embed_xuel
就是没有读懂这里。能否留下QQ请教一下啊。谢谢了
2014-06-16 15:55
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 6 楼 embed_xuel
额。。。我知道这个意思。现在的问题是。根据上面的程序,cnt似乎不可能等于0.
2014-06-16 16:04
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
为什么程序一直运行着,就是不出结果捏捏捏
2014-06-16 17:11
快速回复:关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017353 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved