Qualcomm技术论坛
直播中

周杰

7年用户 253经验值
私信 关注
[经验]

Vuforia Unity相机图像访问

本文描述了两种方法获取QCAR相机在unity的图像。




The Image class



有两个选项获取摄像机图像从unity(没有增加)。一个是使用Image的类。这就像本地的版本。首先,使用CameraDevice注册所需的图像格式。SetFrameFormat方法:



CameraDevice.Instance.SetFrameFormat(Image.PIXEL_FORMAT.RGB888, true);
QCARBehaviour运行Start方法调用此方法使用Unity脚本排序特征在一次更新回调
然后,您可以使用CameraDevice.GetCameraImage方法检索图像。您可以从ITrackerEventHandler.OnTrackablesUpdated回调来确保你获取最新的相机的图像匹配当前帧。经常检查以确保相机的图像是无效的,因为它可以登记注册后的图像变得可用图像格式需要几帧。

这是完整的脚本



using UnityEngine;
using System.Collections;
public class CameraImageAccess : MonoBehaviour, ITrackerEventHandler
{
private Image.PIXEL_FORMAT m_PixelFormat = Image.PIXEL_FORMAT.RGB888;
private bool m_RegisteredFormat = false;
private bool m_LogInfo = true;
void Start()
{
QCARBehaviour qcarBehaviour = (QCARBehaviour) FindObjectOfType(typeof(QCARBehaviour));
if (qcarBehaviour)
{
qcarBehaviour.RegisterTrackerEventHandler(this);
}
}
public void OnTrackablesUpdated()
{
if (!m_RegisteredFormat)
{
CameraDevice.Instance.SetFrameFormat(m_PixelFormat, true);
m_RegisteredFormat = true;
}
if (m_LogInfo)
{
CameraDevice cam = CameraDevice.Instance;
Image image = cam.GetCameraImage(m_PixelFormat);
if (image == null)
{
Debug.Log(m_PixelFormat + " image is not available yet");
}
else
{
string s = m_PixelFormat + " image: n";
s += " size: " + image.Width + "x" + image.Height + "n";
s += " bufferSize: " + image.BufferWidth + "x" + image.BufferHeight + "n";
s += " stride: " + image.Stride;
Debug.Log(s);
m_LogInfo = false;
}
}
}
}

Background Texture Access



Image类提供了相机的像素作为一个字节数组。这对一些图像处理任务是有用的,但有时最好获得作为一个OpenGL纹理图像。您可以使用BackgroundTextureAccess示例演示的方法。在这里,而不是让Vuforia渲染摄像机图像每一帧,你注册一个Texture2D对象充满相机像素每一帧。见Readme。txt附带的示例(在资产文件夹)两种方式渲染相机图像使用这种方法。






更多回帖

发帖
×
20
完善资料,
赚取积分