1. 程式人生 > >Vuforia Unity Camera Image Access

Vuforia Unity Camera Image Access

本文描述了兩種方法獲取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附帶的示例(在資產資料夾)兩種方式渲染相機影象使用這種方法。

參考資料

https://developer.vuforia.com/resources/dev-guide/unity-camera-image-access