我们在实现AR效果时,为了大大减少我们的工程量,我们可以借助一些主流的AR SDK,比如EasyAR ,Vuforia,太虚AR等等,当然,作为AR技术的狂热爱好者,我们的追求远远不止于此。所以了,我今天给大家介绍了几种“底层”实现AR的方式。
Opencv和C++ 实现
大概思路是OpenCV实现对Marker的识别和定位,然后通过OpenGL将虚拟物体叠加到摄像头图像下,实现增强现实。具体思路是:
使用SIFT算法进行识别(特征点的提取并用特征向量对特征点描述,接着当前视图的特征向量与目标对象的特征向量进行匹配)
根据识别出来的原目标和帧图像匹配关系得到变化矩阵,来显示三维物体(使用OpenGL来绘制),实现跟踪。
对于基于标记的AR的Opencv实现,我们常常用到Marker:
黑色边框中是编码信息,白色为1,黑色为0,将每一行作为一个字,那么每个字有5bits。其中,1、3、5位为校验位,2、4位为信息位。接下来用Opencv实现,其具体思路为:
对输入图像帧进行标记检测,灰度化,找到图像中轮廓,检测和解码标记,
估计标记的三维姿态,这里包括提前对摄像机进行相机标定,获取相机内参数和失真系数,根据这个计算出标记的旋转矩阵和平移矩阵,
由相机内参数和标记的旋转矩阵和平移矩阵,用OpenGL进行渲染三维物体。
项目地址:https://github.com/GeekLiB/opencv_iphoneAR
参考资料:
书籍:深入理解OpenCV 实用计算机视觉项目解析
(链接: https://pan.baidu.com/s/1mi0oCmG 密码: erh5)
文章:OpenGL与OpenCV实现增强现实
(链接http://www.tuicool.com/articles/MNJjyam)
Python 实现AR效果
Python是世界上最优雅的语言,目前的计算机视觉项目大都用Python来实现,当然用Python的CV库也可以很轻松的实现AR效果。
用Python来实现AR效果,我们首先运用到两个工具包—-PyGame与PyOpenGL。PyGame是非常流行的游戏开发工具包,它可以非常简单的处理显示窗口,输入设备,事件以及其他内容。PyGame是开源的(http://www.pygame.org/)。PyOpenGL是OpenGL图形煸炒的Python绑定接口。并且它也是开源的(http://www.opengl.org/wiki/Getting_started)。在实现的过程中,我们需要获取照相机矩阵并转换到OpenGL格式,并以平面和标记物进行姿态估计,然后在图像中放置虚拟物体。
参考资料:
python计算机视觉:链接: https://pan.baidu.com/s/1geArUUn 密码: fnby
当然,这里也有一个很好的Python AR框架BAR4Py,它是由百晓通客栈×创客项目群着手开发的“增强现实(AR)”的 Python 开发库。
项目地址:https://github.com/GeekLiB/AR-BXT-AR4Python
特点:
基于 OpenCV,以及 Python 的数学库;
跨平台,可拓展,免费、开源;
支持简单的 Mark 标记物以及复杂的图像标记;
使用遗忘队列结构动态更新相机标定;
可以看看他们的测试效果:
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/170683.html