OpencvForUnity

WebCamTextureMarkerLessARExample原理

1、变量声明

 

 

 

 

 2、设置toggle的状态

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

 

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

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

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

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

 7、相机校准

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

 相机矩阵

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

 Unity与OpenCV之间的转换

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

FOV:

 左右手坐标系转换矩阵

  Z轴向转换矩阵

 

8、

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

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


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

在这里插入图片描述

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

toggle组件

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

猜你喜欢

转载自blog.csdn.net/zjhgf/article/details/126337322
今日推荐