OpenCVForUnity学习教程——2

先解析官方demo

首先右上角的System Info按钮不说了,显示系统环境。

然后Show License也不说了。

Basic中有四个

1.Texture2DToMat Example

顾名思义,将Unity中的Textur2D转为OpenCV用的Mat(矩阵)数据。

打开场景,UI不管,用来退回主界面的,核心代码在Cube上,再抛掉用来控制Cube旋转的Touch Controller脚本(下文不再重复此类废话)。就剩下Texture2DToMatExample脚本,打开。

主要就两句话:

Utils.texture2DToMat (imgTexture, imgMat); // 直接调用接口将texture2D转为Mat

Utils.matToTexture2D (imgMat, texture); //再把Mat数据转回Texture2D

这个demo展示了两边的数据类型如何转换,查到最里面也就是传了个宽高类型进去然后调用dll给mat赋值。

2.WebCamTextureToMat Example

前面一大段是打开WebCamTexture适配各个Unity版本的,然后在OnInited函数里保存下宽高,最后在Update里面用webCamTextureToMat转为mat。

3.WebCamTextureToMatHelper Example

在上面的基础上多了旋转90度,镜像,前后摄像头切换(移动端切换了摄像头可能需要再左右镜像处理一下)。

4.MatBasicProcessing Example

这个demo内容多了,一点一点看。

1.initialization初始化:

上面是代码,下面是结果,包括了三阶矩阵、二阶旋转矩阵、五阶全1矩阵、五阶全0矩阵、五阶单位矩阵等的初始化方式。

2.malti channel

详细介绍见https://blog.csdn.net/fightingforcv/article/details/51206345

dims:Mat所代表的矩阵的维度,如 3 * 4 的矩阵为 2 维, 3 * 4 * 5 的为3维。

elemSize : 矩阵中每一个元素的数据大小,如果Mat中的数据的数据类型是 CV_8U 那么 elemSize = 1,CV_8UC3 那么 elemSize = 3,CV_16UC2 那么 elemSize = 4。

elemSize1:表示的是矩阵中数据类型的大小,即 elemSize / channels 的大小。

channels:通道,矩阵中的每一个矩阵元素拥有的值的个数,比如说 3 * 4 矩阵中一共 12 个元素,如果每个元素有三个值,那么就说这个矩阵是 3 通道的,即 channels = 3。常见的是一张彩色图片有红、绿、蓝三个通道。

3.dump

dump中文意思是转存,这里个人理解为一个mat的dump值为这个矩阵的实际值。从例子中可以看到直接log出mat出来的是地址等,要取到mat的值,就要用到mat.dump()。

4.CVException handling

异常类,就是使用setDebugMode函数第二个参数来控制是否显示异常。例子展示了显示和不显示的调用。

5.property

属性,展示了mat的所有属性,详细可以对照2中的链接。

6.four arithmetic operation

展示了矩阵的加减乘除算法,不熟悉矩阵知识的需要详细看看理解一下。(比如我)到m8都很好理解,这里不解释了(还不会的把线代前几张矩阵的部分再看一遍吧)。最后的两个则是说矩阵内参数格式不一样的不能相除,矩阵的size不一样的也不能相除。

7.convertTo

看名字就知道是什么类型的转换,m2是将m1直接转换为默认的矩阵,所有值变成整型,m3是先将m1*2在加10然后取整(四舍五入)。

8.reshape

百度百科解释了这个函数的用法:https://baike.baidu.com/item/reshape/7056760?fr=aladdin

实际上就是矩阵里的值不变,改变其行列数、维度。用法跟百度百科的稍有不同,channels代表每一个矩阵元素拥有的值的个数,所以m2的意思就是原来3x4的矩阵把channels改为2后矩阵就变成3x2的矩阵了,第一个值由原来的(1)变成了(1,2)后面以此类推。m3则是把矩阵改为2行。

9.range

range函数是只引用原矩阵的一部分,all就是全部,后面的就是0-2行、第0行、全部、0-2列、第0列。range由最后一个调用者释放原矩阵。

简书编辑器不行啊,写不下了。下篇

你可能感兴趣的:(python,java,编程语言,深度学习,机器学习)