simple2的程序分析

介绍一个新模块:Gsub_Lite是优化版本的Gsub,更有效,使用流水线方式,捕获视频->视频处理模块->AR模块->Gsub模块->增强现实输出。可用别的三维可视化实体模拟软件代替Gsub。

这个程序与simple几乎是一样的,只是在键盘响应上多出一个c键,这个c键可以选择模式:

包括连续模式和单帧模式。两者在求转换矩阵时有区别,连续模式就是使用arGetTransMatCout函数,单帧模式使用arGetTransMat求转换矩阵。

 if( key == 'c' ) {
        printf("*** %f (frame/sec)\n", (double)count/arUtilTimer());
        count = 0;
        mode = 1 - mode;
        if( mode ) printf("Continuous mode: Using arGetTransMatCont.\n");
         else      printf("One shot mode: Using arGetTransMat.\n");
    }

arGetTransMat:计算相机位置和检测到的标识之间的转换矩阵,例如计算相机相对于已跟踪标识的位置和方位。输入:marker_info:由arDetectMarker产生的结构体,包含有检测到的标识相对于相机的位置和方位的参数;center:标识的物理中心,这个函数假定标识在2维平面,z轴向下,所以角顶点位置能被呈现在2D平面上,标识的角顶点位置顺时针指明;width:标识的大小,因为是正方形标识,宽度就代表了大小,mm表示;conv:从标识到摄像机的转换矩阵,代表两者真实的相对位置。

ArGetTransMatCont:应用历史函数计算相机位置;在检测出的标识和真实相机上计算转换矩阵,比如相机相对于被跟踪的标识的位置和方向。可以在先前的值上面进行操作,结果会更稳定。减少抖动。
输入:arDetectMarker产生的标识信息结构体,包含有检测到的标识相对于相机的位置和方位;先前获得的转换矩阵;center:标识的物理中心,这个函数假定标识在2维平面,z轴向下,所以角顶点位置能被呈现在2D平面上,标识的角顶点位置顺时针指明;width:标识的大小,因为是正方形标识,宽度就代表了大小,mm表示;conv:从标识到摄像机的转换矩阵,代表两者真实的相对位置。
返回:0。

arDetectMarkerLite:与arDetectMarker对应,只是少了错误校正函数,但是运行快一点。

实际程序中当选择了模式1,或者前一帧没有检测到标识图像时,用arGetTransMat;否则用arGetTransMatCont。

if( mode == 0 || contF == 0 ) {
        arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
    }
    else {
        arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
    }
    contF = 1;

总之,后者更好用吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值