Vuforia Unity Camera Image Access
阿新 • • 發佈:2019-02-04
本文描述了兩種方法獲取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