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。
页:
[1]