嵌入式开发者社区

标题: 数字识别ImageProcess [打印本页]

作者: surina    时间: 2017-5-26 14:28
标题: 数字识别ImageProcess
不明白下面这段程序,哪位高抬贵手指点一二。大概的过程或者原理,都可以。跪谢。
//图像分割 (源图像, 区域数, 各个区域的起始结束坐标)    逐行像素扫描
void IMG_segmentation(const unsigned char *SourceImage, char *AreaNum, unsigned int *Coord)
{
        unsigned int x, y, i, j;
        unsigned char gray = 0, oldgray = 0;
        char line = 0;
        unsigned int updown[100];
        char num = 0;

        x = (SourceImage[2] << 8) + SourceImage[1]; //一行的像素数
        y = (SourceImage[4] << 8) + SourceImage[3]; //一列的像素数

        for(i=5; i<y-6; i++)
        {
                for(j=5; j<x-6; j++)
                {
                        GetPixelValue(SourceImage, j, i, &gray);
                        if(gray == 0)
                                break;
                }

                if((oldgray == 0xff) && (gray == 0))
                {
                        updown[line] = i; //y坐标 上端
                        line++;
                }

                if((oldgray == 0) && (gray == 0xff))
                {
                        updown[line] = i; //y坐标 下端
                        line++;
                }
                oldgray = gray;
        }

        for(; line>=0; line=line-2)
        {
                for(i=5; i<x-6; i++)
                {
                        for(j=updown[line-2]; j<updown[line-1]; j++)
                        {
                                GetPixelValue(SourceImage, i, j, &gray);    //总在这个位置跑死,谁能帮帮我
                                if(gray == 0)
                                        break;
                        }

                        if((oldgray == 0xff) && (gray == 0))
                        {
                                Coord[num*4] = i; //区域的起始x坐标
                                Coord[num*4+1] = updown[line-2]; //区域的起始y坐标
                        }

                        if((oldgray == 0) && (gray == 0xff))
                        {
                                Coord[num*4+2] = i; //区域的结束x坐标
                                Coord[num*4+3] = updown[line-1]; //区域的结束y坐标
                                num++;
                        }
                        oldgray = gray;
                }
        }

        *AreaNum = num;
}


作者: Lewis    时间: 2017-5-27 12:07
[attach]2378[/attach]
[attach]2379[/attach]





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4