Hololens-Unity定位相机(转)

转自:http://dev.arinchina.com/177wz/ar9641/9641/1

启用相机摄影摄像能力

在使用摄像头时,我们必须启用WebCam能力。

1.     在Unity中,打开Player settings,(通过导航,到“编辑>项目设置>播放器”页面访问播放器设置)

2.     展开Windows Store标签页

3.     在"Publishing Settings > Capabilities"部分中,勾选WebCam能力

在同一时刻中只能执行一次相机操作。为了识别当前相机环境处于哪种模式下(拍照还是视频或无场景),你可以通过UnityEngine.VR.WSA.WebCam.Mode来进行检查。

照片捕获

命名空间:UnityEngine.VR.WSA.WebCam

类型:PhotoCapture

PhotoCapture类型允许使用相机拍摄静态照片。使用相机拍摄的正常模式如下:

1.  创建PhotoCapture对象

2.  通过使用想要的设置来创建一个CameraParameters对象

3.  调用StartPhotoModeAsync(),开始拍照模式

4.  选取想要的照片拍摄

·        (可选项)进一步处理图像

5.   关闭拍照模式并释放资源

使用PhotoCapture的通用设置

对于任意拍照方式,开始的前三步都如下:

创建PhotoCapture对象

存储对象,配置拍摄参数并开始拍照模式

Hololens-Unity定位相机(转)_第1张图片

最后,需要使用同样的清理代码来关闭相机

完成这些步骤后,你可以挑选使用捕获照片方式。

捕获照片至文件

最简单的操作是直接将照片捕获到文件。照片可以被存储为PNG或JPG格式。

如果我们成功开始了拍照模式,就需要拍照并将照片存储到磁盘上。

Hololens-Unity定位相机(转)_第2张图片

完成捕获照片到磁盘的操作后,我们需要退出拍照模式并清理对象

Hololens-Unity定位相机(转)_第3张图片

捕获文件至Texture2D对象

我们可以把捕获数据保存为Texture2D对象,做法和保存到磁盘类似。步骤如下:

在OnPhotoModeStarted,捕获一帧图像到内存中。

Hololens-Unity定位相机(转)_第4张图片

我们需要把得到的结果赋给Texture2D对象,然后清理代码

Hololens-Unity定位相机(转)_第5张图片

捕获照片并与原始数据交互

为了在内存中操作图像原始数据,需要的步骤和捕获图片到Texture2D类似,不同之处在于,OnCapturedPhotoToMemory()方法里可以获得图像原始数据并操作它们。

在下面的例子中,我们会创建一个List用来进一步处理或者直接通过SetPixels()方法来应用于Texture2D对象。

Hololens-Unity定位相机(转)_第6张图片

捕获视频

命名空间:UnityEngine.VR.WSA.WebCam

类型:VideoCapture

捕获视频的用法和捕获照片相似,不同之处在于你必须指定一个帧率(FPS),并且直接存储到磁盘上的视频必须是MP4格式。

下面是具体步骤:

1.    创建VideoCapture对象

2.    使用我们想要的设置来创建一个CameraParameters对象

3.    调用 StartVideoModeAsync()方法开始视频捕获模式

4.    开始录制视频

5.    停止录制视频

6.    停止视频捕获模式并释放相机资源

开始创建VideoCapture对象VideoCapture m_VideoCapture = null

设置参数

Hololens-Unity定位相机(转)_第7张图片

配置完成VideoCapture对象,开始录制视频

Hololens-Unity定位相机(转)_第8张图片

在开始录制后,你需要通过更新UI或者行为来确保可以停止视频捕获。在这里我们只输出log。

最后我们需要停止视频捕获,可以通过定时器或者其他输入方式来实现。

一旦停止视频捕获,需要及时退出视频捕获模式并释放相机资源。

Hololens-Unity定位相机(转)_第9张图片

故障问题解决

·获取不到分辨率

·        确保你在项目中启用了WebCam能力

·        全息图像无论怎样设置都不能捕获到图片或者视频中

·        未来的更新会支持捕获全息图像

你可能感兴趣的:(Hololens-Unity定位相机(转))