| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 872 人关注过本帖
标题:关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮助
只看楼主 加入收藏
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮助
#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: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:5 
#include  "Params.h"这个文件你导入了吗

我不是砖家,要努力成为砖家。
2014-06-16 13:19
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 2 楼 砖家的谎言
这个文件有导入。我是自己该觉下面的那个for循环有问题。还有跳出语句if(cnt==0)break
2014-06-16 15:28
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
回复 楼主 行在路上的淼
你这有跳出语句呀,不会死循环啊

总有那身价贱的人给作业贴回复完整的代码
2014-06-16 15:43
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 4 楼 embed_xuel
就是没有读懂这里。能否留下QQ请教一下啊。谢谢了
2014-06-16 15:55
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
if(cnt==0)break
如果cnt等于0,跳出循环for(;;)

总有那身价贱的人给作业贴回复完整的代码
2014-06-16 16:01
行在路上的淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 6 楼 embed_xuel
额。。。我知道这个意思。现在的问题是。根据上面的程序,cnt似乎不可能等于0.
2014-06-16 16:04
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
for(;;){
        cnt=0;  //这里给cnt赋值为0,每次循环都会把cnt重新赋值为0

总有那身价贱的人给作业贴回复完整的代码
2014-06-16 16:08
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:5 
表示不喜欢看源代码
 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][jp]==HIGH){
                        image[ip][j ]==label;cnt++;
                    }
                    if(image[ip][jp]==HIGH){
                        image[ip][jp]==label;cnt++;
                    }
                }
                if(cnt==0)break;
                }
}

表示可能 会死循环 if(cnt==0)情况的成立是在image[i][j]==label成立后  if(image[ip][jp]==HIGH)image[ip][jm]==HIGH)等等条件也满足的情况下才会有 cnt++的运算
具体的要看 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;
这段代码在遍历二维数组的过程中 能否上述条件一个都不成立
意思就是在遍历完整个二维数组后发现所有的image[i][j]==label的元素  它的上下左右的元素和它自身均不等于HIGH
cnt才会等于0
如果整个数组遍历完成后  不存在image[i][j]==label cnt也会为0 但是整个循环是死循环

 if(image[i ][j ]==HIGH){
                        image[i ][j ]==label;cnt++;
                    }
是为下次遍历数组的时候  指定 image[i ][j ]==label的条件

[ 本帖最后由 zhu224039 于 2014-6-16 16:58 编辑 ]

我要成为嘿嘿的黑客,替天行道
2014-06-16 16:26
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
记得给分

我要成为嘿嘿的黑客,替天行道
2014-06-16 16:27
快速回复:关于图像处理中便签化程序,程序编译没问题,但是运行是有问题的。求帮 ...
数据加载中...
 
   



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

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