找回密码
 立即注册
查看: 252|回复: 0

OpencvForUnity

[复制链接]
发表于 2022-11-29 07:26 | 显示全部楼层 |阅读模式
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。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 16:41 , Processed in 0.089502 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表