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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题