标题:我的循环哪里错了啊?
只看楼主
hxt532084126
Rank: 1
等 级:新手上路
帖 子:34
专家分:5
注 册:2012-8-26
结帖率:78.57%
已结贴  问题点数:40 回复次数:5 
我的循环哪里错了啊?
我想实现对picturebox.image中的图片提取边界坐标,我的想法是从图片的3/5高度处开始一行一行的扫描,因为我的图片是二值化后的,而且我只要图片的外边界,所以我想通过相邻两个像素颜色的不同来判定是否是边界坐标,然后将这个坐标的i,j值分别存于两个数组中,这两个数组的第一个值在全局中我都赋了0,然后开始扫描,因为我的图片是一个圆球放在桌子上,我想要圆球的边界坐标,所以我想直到有一点的j值小于上一行的j值作为判断依据退出循环;我这样编哪里错了,为什么会一直扫描到底,没有退出呢?而且为什么anglesurvey1[anglesurvey_i]直接就是图片高度。。。
这是左边界检测的代码:
        int[] anglesurvey1 = new int[1000];
        int[] anglesurvey2 = new int[1000];
        int[] anglesurvey3 = new int[1000];
        int[] anglesurvey4 = new int[1000];
        int anglesurvey_i = 1, anglesurvey_j = 1;                          
        int anglesurvey1_i = 1, anglesurvey1_j = 1;
private void edgedetection_Click(object sender, EventArgs e)     
        {

            Bitmap curBitmap=new Bitmap(pictureBox1.Image)   ;                 
            Color color1, color2;
            for (int i = curBitmap.Height*3/5; i < curBitmap.Height; i++)                                           //左边图形的检测
            {
                for (int j = 0; j < curBitmap.Width; j++)
                {
                    color1 = curBitmap.GetPixel(i, j);
                    color2 = curBitmap.GetPixel(i, j + 1);
                    int mycolor1 = color1.R * 256 + color1.G * 256 + color1.B * 256;//
                    int mycolor2 = color2.R * 256 + color2.G * 256 + color2.B * 256;
                    if (mycolor1!= mycolor2)//判断这一行两相邻点是否颜色一致
                    {
                        anglesurvey2[0] = 0;//数组第一个值赋值为0
                        if (anglesurvey2[anglesurvey_j-1]<=j)  //判断前一行像素j值是否比这一行的大,大则保留这个像素的i,j值
                        {
                            anglesurvey1[anglesurvey_i] = i; //将这一行的i值赋予数组anglesurvey1
                            anglesurvey2[anglesurvey_j] = j;//将这一行的j值赋予数组anglesurvey2
                            anglesurvey_i++;
                            anglesurvey_j++;
                            break;
                        }
                        else
                        {
                           
                            break;
                        }
                    }
                }
            }
搜索更多相关主题的帖子: 图片 而且 
2013-04-02 20:43
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:14 
因为你是两个for,break只能退出最里面的for,外面的for,也主是循环图片高度的for,会一直到循环完为止,要想全部退出,在第二个for循环里面需要用return,或是在第二个for的外边,第一个for的里面,再次使用break
2013-04-02 21:39
hxt532084126
Rank: 1
等 级:新手上路
帖 子:34
专家分:5
注 册:2012-8-26
得分:0 
回复 2楼 yhlvht
怎么加呀,我也想在第一个for循环中加break,但加不进去,没头绪啊没头绪...
2013-04-02 22:32
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:0 
我对取边界的算法并不太了解,也不清楚怎么加比较好,通常来说,你在第1个for中,再写个if,如果满足什么条件,就break,这样就退出去了
2013-04-02 22:39
zhangjing198
Rank: 2
等 级:论坛游民
帖 子:54
专家分:76
注 册:2013-4-2
得分:14 
2楼应该是正解~~
2013-04-07 16:16
qq645485165
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:76
专家分:197
注 册:2013-3-16
得分:14 
boolean bl=false;如果内层(第二层)循环需要结束就令bl=ture;
然后在第一层循环里添加if(bl==true)break;
2013-04-09 08:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402910-1-1.html




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

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