原标题:四种AR的实现方式

我们在实现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 标记物以及复杂的图像标记;

使用遗忘队列结构动态更新相机标定;

可以看看他们的测试效果:

AR+SLAM

SLAM主要用于地图重建,在AR中,我们主要运用SLAM算法来获取camera pose(SLAM的结果是基于feature的点云,提前重建后可以remap拿到较好的camera pose)。

在这里,我给大家收集了一些SLAM开发资源与AR-SLAM 项目案例,大家可以下载参考。

SLAM开发资源汇总:https://github.com/GeekLiB/Lee-SLAM-source

PTAM-AR:http://www.robots.ox.ac.uk/~bob/research/research_ptamm.html

OpenCV-Marker-less-AR:https://github.com/takmin/OpenCV-Marker-less-AR

Stereo_SLAM_AR(基于ORB-SLAM):https://github.com/ygx2011/Stereo_SLAM_AR

效果:

opencv-markerless-AR-Mobile:https://github.com/meiroo/opencv-markerless-AR-Mobile

ARToolkit

这是一个老牌的AR工具包,ARToolKit 它是一个C/C++ 语言编写的库。对于开发一个AR程序来说,最困难的部分在于实时的将虚拟图像覆盖到用户视口,并且和真实世界中的对象精确对齐。ARToolKit使用图像技术计算摄像机和标记卡之间的相对位置,从而使程序员能够将他们的虚拟对象覆盖到标记卡上面。ARToolKit 提供的快速和准确的标记跟踪,能够让你快速的开发出许多更新更有趣的AR程序。

目前ARToolkit支持以下系统:

相信大多数开发者学习或开发的第一个AR应用用的就是ARToolkit。ARtoolkit的实现步骤是:程序初始化----抓取一帧进行视频的输入----然后探测标示卡----计算摄像头的转移矩阵----绘制虚拟物体----关闭视频捕捉。

ARToolkit官网:http://artoolkit.org/

ARTooklit优秀文章:http://www.cnblogs.com/polobymulberry/p/5905680.html

下次了,会出一个ARToolkit 与 unity 结合的开发教程。

AR酱原创,转载务必注明

微信号AR酱(ARchan_TT)

AR酱官网:www.arjiang.com返回搜狐,查看更多

责任编辑:

python ar_四种AR的实现方式相关推荐

  1. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  2. Unity—AssetBundle的打包及四种加载资源方式

    AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...

  3. post 表单中常见的四种表单请求方式

    //post 表单中常见的四种表单请求方式 typedef enum {     postformURLEncoded,                 /*对应Content-Type: appli ...

  4. java regex match 替换_java正则表达式四种常用的处理方式(匹配、分割、替代、获取)...

    java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import ja ...

  5. 微信小程序四种父子相互传值方式

    微信小程序四种父子相互传值方式 1. 绑定自定义属性(父传子),触发自定义方法 (子传父) 原生微信小程序+uni-app都可以实现 父组件: <template><view cla ...

  6. Python中三种表示NA的方式

    Python中三种表示NA的方式 # -*- coding: utf-8 -*- import numpy as np import pandas as pd# data_frame = np.loa ...

  7. 常用的四种免费证书申请方式

    免费申请证书的四种常用方式 1. Let's Encrypt 申请教程 2.Cloudflare 申请教程 3.FreeSSL 申请教程 4. 阿里云(云厂商提供)免费证书 申请教程 1. Let's ...

  8. jQuery中的四种事件监听方式

    jQuery中提供了四种事件监听方式,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undelegate.off.在开始看他们之前,先来声明一个例子 ...

  9. pycharm设置控制台的解释器_PyCharm 中文教程 01:运行 Python 的四种方式

    <PyCharm 中文指南>在线阅读:http://pycharm.iswbm.com/ Github 项目主页:https://github.com/iswbm/pycharm-guid ...

  10. python中四种进制的输出_Python基础语法和进制

    基础语法 开发种常用的快捷键 键位 功能 ctrl + / 添加注释和取消注释 ctrl + s 保存 ctrl + c 复制 ctrl + v 粘贴 ctrl + x 剪切 ctrl + z 撤销 ...

最新文章

  1. P4755 Beautiful Pair (数据结构+分治)
  2. mysql建索引 字段截取_提高MySQL索引策略一:隔离查询列
  3. Android性能优化
  4. iBatis.Net系列(二)-项目类型
  5. wireshark远程抓包
  6. TortoiseGit 将工作区变动文件提交本地仓库_入门试炼_04
  7. 试用期这样做更快通过
  8. P1319 压缩技术(python3实现)
  9. Silverlight C# 游戏开发:关于精灵for Silverlight容器
  10. php变量显示,php – 显示会话变量
  11. websocket协议中获取 http 请求字符串
  12. 为什么上一家公司离职?
  13. 浏览器输入网址到页面呈现的过程
  14. 基于jsTree的无限级树JSON数据的转换
  15. TSC工业型条码打印机的价格的影响因素有哪些呢?
  16. 如何编写一份优质的可行性研究报告
  17. 斯坦福发布AI年度报告,中国AI论文数全球第二,第一也不是美国【附下载】
  18. Java语言HttpClient使用代理IP
  19. csgo如何旋转跳?如何连跳
  20. Rockchip PX30/RK3326 Android开机时间优化

热门文章

  1. ReactJs 简介
  2. Kafka安全认证 SASL/PLAINTEXT,账号密码认证
  3. STM32串口蓝牙实验--蓝牙控制小灯
  4. 30分钟快速了解云计算
  5. MySQL 安装时一直卡在starting server的解决办法
  6. editplus的php插件,editplus的各式插件
  7. 齐次方程与非齐次方程
  8. Syzkaller最后一步运行./bin/syz-manager 无法启动虚拟机 failed to create instance: failed to read from qemu: EOF
  9. 如何在 WordPress 中创建登录页面
  10. Dingo Api请求接口404?