如何从iOS上的照片输出中检索AVCameraCalibrationData?
我正在寻找与我在iOS设备上拍摄的照片相关联的镜头畸变系数(注意:不是焦距,也不是主点)。据我所知,在iOS设备上执行此操作的唯一方法是使用如何从iOS上的照片输出中检索AVCameraCalibrationData?,ios,objective-c,camera,camera-calibration,Ios,Objective C,Camera,Camera Calibration,我正在寻找与我在iOS设备上拍摄的照片相关联的镜头畸变系数(注意:不是焦距,也不是主点)。据我所知,在iOS设备上执行此操作的唯一方法是使用AVCameraCalibrationData。仅提供有关如何从AVDepthData检索相机校准数据的信息,但文档和说明都表明AVCameraCalibrationData可用于图像,而不仅仅是深度数据 拍摄图像时是否可以检索AVCameraCalibrationData信息?如果是,是否有关于此功能的文档?您只能从深度数据输出或照片输出中获取AVCame
AVCameraCalibrationData
。仅提供有关如何从AVDepthData
检索相机校准数据的信息,但文档和说明都表明AVCameraCalibrationData
可用于图像,而不仅仅是深度数据
拍摄图像时是否可以检索
AVCameraCalibrationData
信息?如果是,是否有关于此功能的文档?您只能从深度数据输出或照片输出中获取AVCameraCalibrationData
然而,如果您只需要FOV,那么您只需要该类提供的部分信息——camera intrinsics矩阵——并且您可以从AVCaptureVideoDataOutput中自行获得该信息
在将相机设备连接到捕获会话的AVCaptureConnection上设置cameraIntrinsicMatrixDeliveryEnabled。(注意,您应该首先检查cameraIntrinsicMatrixDeliverySupported;并非所有捕获格式都支持内部函数。)
当视频输出提供样本缓冲区时,请检查每个样本缓冲区的附件中是否有kCMSampleBufferAttachmentKey\u CameraIntrinsicMatrix键。如CMSampleBuffer.h所述(有人应该提交一份雷达文件,说明如何将此信息输入在线文档),该附件的值是一个编码矩阵_float3x3的CFData,以及(0,0)和(1,1)该矩阵的元素是水平和垂直焦距。背景:当被问及相机校准时,许多堆栈溢出响应都参考了内部数据,但校准数据通常包括内部数据、外部数据、镜头畸变等。其全部列出 我假设你有通用的摄像头应用程序代码。在该代码中,当拍摄照片时,您可能会调用photoOutput函数,该函数类似于以下内容:
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {...
print("isCameraCalibrationDataDeliverySupported: \(output.isCameraCalibrationDataDeliverySupported)")
输出参数将有一个值,您可以参考该值,以查看是否支持调用摄影机校准,因此,例如,要打印该值,请使用以下内容:
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {...
print("isCameraCalibrationDataDeliverySupported: \(output.isCameraCalibrationDataDeliverySupported)")
注意:在我链接到的文档中,它仅在特定场景中受支持:
“只有当
IsDualCameradualPhotoodeLiveryEnabled属性为true。若要启用
摄像机校准交付,设置
照片设置中的isCameraCalibrationDataDeliveryEnabled属性
对象。”
所以这很重要,注意这一点以避免不必要的压力。使用实际值进行调试,并确保已启用适当的环境
所有这些就绪后,您应该从以下位置获取实际摄像机校准数据:
photo.cameraCalibrationData
只需从该对象中拉出即可获得所需的特定值,例如:
photo.cameraCalibrationData?.extrinsicMatrix
photo.cameraCalibrationData?.intrinsicMatrix
photo.cameraCalibrationData?.lensDistortionCenter
etc.
基本上,您链接到的文档中列出的所有内容,以及我再次链接到的所有内容
还有一件事需要注意,如果您只寻找内在矩阵,那么与这些值中的其他值相比,可以更容易地获得它(即,在环境中没有那么严格)。如果你把它用在计算机视觉上,这就是我用它的目的,有时这就是所需要的。但对于真正酷的东西,你会想要全部的。谢谢,但我不需要焦距或主要点。也就是说,我根本不需要内在矩阵。我只寻找镜头畸变系数。特别是,我想知道如何从照片输出中检索
AVCameraCalibrationData
。