You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HoloLens 2获取目标图像的相机坐标系图像坐标

从HoloLens 2获取Vuforia未处理的原始相机坐标系图像坐标

一、将目标世界坐标转换为相机本地坐标系3D坐标

如果你已经通过Vuforia拿到了目标的世界空间坐标,直接利用Unity的相机变换即可得到相机坐标系下的坐标,无需深挖Vuforia内部转换逻辑:

// 假设已获取跟踪目标的世界坐标
Vector3 targetWorldPos = trackableBehaviour.transform.position;
// 转换为相机本地坐标系下的坐标
Vector3 targetCameraLocalPos = Camera.main.transform.InverseTransformPoint(targetWorldPos);

targetCameraLocalPos就是完全基于相机坐标系的3D坐标,未经过Vuforia空间映射的额外处理。

二、获取目标对应的原始图像像素坐标

如果需要的是目标在相机原始图像上的像素坐标,直接调用Vuforia公开的TrackableResult API:

void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
    if (newStatus == TrackableBehaviour.Status.TRACKED)
    {
        var trackableResult = trackableBehaviour.CurrentTrackableResult;
        if (trackableResult != null)
        {
            // 获取目标在原始相机图像上的像素点集合
            List<Vector2> rawImagePoints = trackableResult.GetImagePoints();
            // 遍历使用像素坐标,比如rawImagePoints[0]是目标的一个角点坐标
        }
    }
}

这里返回的像素坐标是相机传感器直接输出的原始数据,没有经过Vuforia的空间映射矫正。

三、自行通过相机姿态矩阵转换

如果需要更底层的姿态控制,可以直接获取相机的世界姿态矩阵,通过逆矩阵完成坐标转换:

// 获取Vuforia相机的世界姿态矩阵
Matrix4x4 cameraWorldPose = Vuforia.CameraDevice.Instance.GetCameraPose();
// 计算相机本地坐标系的变换矩阵(世界转相机)
Matrix4x4 cameraToWorldInverse = cameraWorldPose.inverse;
// 将目标世界坐标转换为相机本地坐标
Vector3 targetCameraLocalPos = cameraToWorldInverse.MultiplyPoint(targetWorldPos);

内容的提问来源于stack exchange,提问作者sanjay dabhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:17:34