【发布时间】:2020-04-03 03:23:34
【问题描述】:
在ARKit中使用ARSessionDelegate处理原始相机图像时...
func session(_ session: ARSession, didUpdate frame: ARFrame) {
guard let currentFrame = session.currentFrame else { return }
let capturedImage = currentFrame.capturedImage
debugPrint("Display size", UIScreen.main.bounds.size)
debugPrint("Camera frame resolution", CVPixelBufferGetWidth(capturedImage), CVPixelBufferGetHeight(capturedImage))
// ...
}
...如文档所述,相机图像数据与屏幕尺寸不匹配,例如,在 iPhone X 上我得到:
- 显示尺寸:375x812pt
- 相机分辨率:1920x1440px
现在有displayTransform(for:viewportSize:) API 可以将相机坐标转换为视图坐标。像这样使用 API 时:
let ciimage = CIImage(cvImageBuffer: capturedImage)
let transform = currentFrame.displayTransform(for: .portrait, viewportSize: UIScreen.main.bounds.size)
var transformedImage = ciimage.transformed(by: transform)
debugPrint("Transformed size", transformedImage.extent.size)
我得到的尺寸为 2340x1920,这似乎不正确,结果的纵横比应为 375:812 (~0.46)。我在这里错过了什么/使用此 API 将相机图像转换为“由 ARSCNView 显示”的图像的正确方法是什么?
(示例项目:ARKitCameraImage)
【问题讨论】: