OpencvForUnity

WebCamTextureMarkerLessARExample原理

1、变量声明

OpencvForUnity_第1张图片

OpencvForUnity_第2张图片 

OpencvForUnity_第3张图片 

OpencvForUnity_第4张图片 

OpencvForUnity_第5张图片 

 2、设置toggle的状态

OpencvForUnity_第6张图片

 3、读取数据持久化路径下的图片

OpencvForUnity_第7张图片

 

 4、将图片格式修改为Texture格式

OpencvForUnity_第8张图片

 5、将原始图片的格式设置为与读取到图片的格式一致

OpencvForUnity_第9张图片

 6、当WebCam初始化完成后,这个方法被调用。

它通过webCamTextureToMatHelper.GetMat ()获得相机图像。根据图像信息设置图像平面的大小,设置了正交相机的视口尺寸以适应图像网格的大小。

OpencvForUnity_第10张图片

OpencvForUnity_第11张图片 7、相机校准

相机通过输入camMatrix,imageSize从先前估计的摄像机矩阵中计算出各种有用的摄像机特性。

OpencvForUnity_第12张图片

 相机矩阵

OpencvForUnity_第13张图片

其中cx,cy为图像中心点(像素坐标表示的光学中心),fx,fy表示摄像机焦距(fx,fy通常相等,且等于比较大的那一个)。相机矩阵设置代码如下:

OpencvForUnity_第14张图片

 Unity与OpenCV之间的转换

unity与opencv之间存在一些区别:OpenCV使用右手坐标系,Unity为左手坐标系;OpenCV中FOV与Unity中FOV也存在区别;相机坐标系中Z轴的前后关系等。所里在初始化方法中也对这些进行了一些转换。

FOV:

OpencvForUnity_第15张图片

 左右手坐标系转换矩阵

  Z轴向转换矩阵

 

 

8、

OpencvForUnity_第16张图片

9、Unity中 物体坐标系->相机坐标系的变换矩阵ARM

两种方式:移动物体或者移动相机,来匹配图像与模型。

OpencvForUnity_第17张图片


在Unity3D中可以使用脚本创建texture2D贴图,并对像素进行操作。

在这里插入图片描述

其中DICT是dictionary的缩写,4x4位表示marker标记要被划分的位数,边界为1比特位,所以4x4的marker识别时会被分割为6x6格

toggle组件

通过Toggle实现类似按钮的操作,举例实现三个的点击功能,3个按钮可以实现的是各自之间点击对应实现相应的功能,不能BT1点击之后再次点击BT2,此时我们不能控制BT2进行功能实现时关闭BT1正在实现的功能。这是一个弊端,可能会导致同时运行不同功能,很混乱,用Toggle组件就可以避免这个问题了,同一个Canvas下的toggle可以实现点击其中一个关闭其他Toggle。

你可能感兴趣的:(unity,opencv,游戏引擎)