Fling_kai 2016-12-15 14:21 采纳率: 0%
浏览 1800

opencv中Snake算法的一段代码

这几天一直在看,昨天看到这里,就一直卡在这里了。。。。主要是这段代码:
                        for( m = 0; m < WTILE_SIZE + rightshift; m++ )  
                            {  
                                gradient[(y*WTILE_SIZE + l) * roi.width + x*WTILE_SIZE + m] =  
                                    (float) (dx[(l + upshift) * TILE_SIZE + m + leftshift] *  
                                    dx[(l + upshift) * TILE_SIZE + m + leftshift] +  
                                    dy[(l + upshift) * TILE_SIZE + m + leftshift] *  
                                    dy[(l + upshift) * TILE_SIZE + m + leftshift]);  
                            } 
                            数组里坐标

    if( scheme == _CV_SNAKE_GRAD )  
                {  
                    /* look at map and check status */                  
                    int x = (pt[i].x + k)/WTILE_SIZE;   //该点的横向 有几个8
                    int y = (pt[i].y + j)/WTILE_SIZE;   //该点的纵向 有几个8
                    //若此处的图像能量还没有获取,则对此处对应的图像分块进行图像能量的求解  
                    if( map[y * map_width + x] == 0 )  
                    {  
                        int l, m;                             

                        /* evaluate block location */  
                        //计算要进行梯度算子处理的图像块的位置  
                        int upshift = y ? 1 : 0;  
                        int leftshift = x ? 1 : 0;  
                        int bottomshift = MIN( 1, roi.height - (y + 1)*WTILE_SIZE );  
                        int rightshift = MIN( 1, roi.width - (x + 1)*WTILE_SIZE );  
                        //图像块的位置大小(由于原ROI不一定是8的倍数,所以图像块会大小不一)  
                        CvRect g_roi = { x*WTILE_SIZE - leftshift, y*WTILE_SIZE - upshift,  
                            leftshift + WTILE_SIZE + rightshift, upshift + WTILE_SIZE + bottomshift };  
                        CvMat _src1;  
                        cvGetSubArr( &_src, &_src1, g_roi );  //得到图像块的数据  
                        //分别对图像的X方向和Y方向进行梯度算子  
                        pX.process( &_src1, &_dx );

                        pY.process( &_src1, &_dy );  
                        //求分块区域中的每个点的梯度  
                        for( l = 0; l < WTILE_SIZE + bottomshift; l++ )  
                        {  
                            for( m = 0; m < WTILE_SIZE + rightshift; m++ )  
                            {  
                                gradient[(y*WTILE_SIZE + l) * roi.width + x*WTILE_SIZE + m] =  
                                    (float) (dx[(l + upshift) * TILE_SIZE + m + leftshift] *  
                                    dx[(l + upshift) * TILE_SIZE + m + leftshift] +  
                                    dy[(l + upshift) * TILE_SIZE + m + leftshift] *  
                                    dy[(l + upshift) * TILE_SIZE + m + leftshift]);  
                            }  
                        }  
                        //map相应位置置1表示此处图像能量已经获取  
                        map[y * map_width + x] = 1;  
                    }  
                    //以梯度数据作为图像能量  
                    Eimg[(j + centery) * win.width + k + centerx] = energy =  
                        gradient[(pt[i].y + j) * roi.width + pt[i].x + k];  
                }  
  • 写回答

1条回答 默认 最新

  • devmiao 2016-12-15 16:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况