在ARCore中,可以使用transformCoordinates2d()方法将视图坐标转换为CPU图像坐标。下面是一个包含代码示例的解决方法:
// 导入 ARCore 库
import com.google.ar.core.ARFrame;
import com.google.ar.core.Pose;
import com.google.ar.core.Session;
// 定义转换方法
public static float[] transformCoordinates2d(ARFrame frame, float[] coordinates) {
// 获取当前 ARFrame 的 CPU 图像坐标系的变换矩阵
Pose imagePose = frame.getAndroidCameraImageIntrinsics().getImageToCameraTransform();
// 将视图坐标转换为 CPU 图像坐标
float[] transformedCoordinates = new float[2];
imagePose.transformPoint(coordinates, 0, transformedCoordinates, 0);
return transformedCoordinates;
}
// 使用示例
ARFrame frame = arSession.update();
float[] viewCoordinates = {100, 200}; // 以视图坐标的形式提供待转换的坐标
float[] cpuCoordinates = transformCoordinates2d(frame, viewCoordinates);
System.out.println("CPU 图像坐标:(" + cpuCoordinates[0] + ", " + cpuCoordinates[1] + ")");
请注意,上述代码示例假设您已经设置好AR会话(arSession)并获取了当前的ARFrame(frame)。在实际使用时,请确保在调用transformCoordinates2d()方法之前,已经初始化了AR会话并获取了有效的ARFrame。