现在的位置: 首页 > 综合 > 正文

opencv 学习备注2

2014年02月26日 ⁄ 综合 ⁄ 共 815字 ⁄ 字号 评论关闭

 发现cvresize后的image,值域可能超出[0,1],导致转换成bitmap失败,不知道是否和插值算法有关。以后在看了。先记下。

现在先修改下IplImage2Bmp函数加上归一功能

 

在把rob hess的代码加到winform中的时候(c++),注意要把带有fprintf的地方该掉。否则会有链接错误。

关于这个错误的说明,可以google extern c,extern c++。

rob hess中interp_step的理解,Lowe论文公式3,求亚像素精度的最佳极值点。同时求x,y,s三维的亚像素最佳值

为了保证求得稳定的结果,这个函数被循环执行5次。

void interp_step( IplImage*** dog_pyr, int octv, int intvl, int r, int c,
     double* xi, double* xr, double* xc )
{
 CvMat* dD, * H, * H_inv, X;
 double x[3] = { 0 };

 dD = deriv_3D( dog_pyr, octv, intvl, r, c );//理解一阶导数二阶导数,则deriv_3D和hessian_3D就能理解。
 H = hessian_3D( dog_pyr, octv, intvl, r, c );
 H_inv = cvCreateMat( 3, 3, CV_64FC1 );
 cvInvert( H, H_inv, CV_SVD );
 cvInitMatHeader( &X, 3, 1, CV_64FC1, x, CV_AUTOSTEP );//X只是一个指针,实际的值放在x中,
 cvGEMM( H_inv, dD, -1, NULL, 0, &X, 0 );//实际的值放在x中,看上面一行。cv的代码还是不够直观,这点比不上matlab。

 cvReleaseMat( &dD );
 cvReleaseMat( &H );
 cvReleaseMat( &H_inv );

 *xi = x[2];
 *xr = x[1];
 *xc = x[0];
}

抱歉!评论已关闭.