关于opencv库
- unity带了opencv库,但是这个库是based on java的基础上的,也就是说我继用过opencv的c++和python之后这回要用java了
- OpenCV for Unity文档
- 注意:需要在载入opecv的asset之后,把
StreamingAssets
文件夹移动到Asset里面,需要操作tool--set plugin settings
- opencv自带了很多example,把这些加入到building setting里面就可以用了
显示图片
首先明确一点,unity里面显示图片没有imshow这种东西,需要把图片的mat转化成texture格式,然后把这个texture加到object上面
- 在这里我建立了一个plane的object,并且调整了相机的角度,用来显示图片
- 这部分在start里面进行,也就是现在的图片是静态显示
var
- var是用来推断这个变量类型,因为var之后直接创建了变量,所以可以推断出来。但是java还是静态语言
- 这种样子是不行的
var foo; foo = "foo";
- 在for循环里可以
imread
- 基础功能和以前一样,读取一张图片,存为mat格式
- 路径中使用了
Application.streamingAssetsPath
,也就是上文中说到需要移动到asset文件夹里的opencv自带的文件夹。 - Imgcodecs和Imgproc等都是以前没有接触过的库,如果需要图片正常显示,需要把格式从BGR改成RGB
Texture2D
- 这个是处理物体表面纹理的一个class,构建新的的时候需要确定这个texture的大小
- 在这里需要创建一个新的texture2D,才能在之后把mat转到texture里面
Utils.matToTexture2D(dst, tex)
- 用于mat和纹理的转换,同样也有texture转到mat的方法
GetComponent()
- 得到这个gameObject的一个部分,尖括号里面的名字取决于现在这个object里面有什么
- 这里用的是plane,里面自带renderer的属性,并且renderer里面带有material,用来修改构成这个object的材料
总结
- 用unity显示图片的中心思想就是这个图片变成了object上面的texture,这个图片不能脱离object而独立存在,所以需要首先为这个图片构建object
最终结果如下
1 | using System.Collections; |