如何从iOS上的照片输出中检索avcameracalibrationdata



我希望检索与我在iOS设备上捕获的照片相关的镜头失真系数(注意:不是焦距或主要点)。从我的理解中,在iOS设备上这样做的唯一方法是使用AVCameraCalibrationData。官方文档仅提供有关如何从AVDepthData检索摄像机校准数据的信息,但是文档和此stackoverflow答案都暗示AVCameraCalibrationData可以与图像一起使用,而不仅仅是与深度数据一起使用。

捕获图像时是否可以检索AVCameraCalibrationData信息?如果是这样,是否有有关此功能的文档?

背景:当询问摄像机校准时,很多这些堆栈溢出响应都在引用固有数据,但是校准数据通常包括内在数据,外部数据,镜头失真等。在您链接到的iOS文档中。

我将假设您已经有一般的相机应用程序代码。在该代码中,当拍摄图片时,您可能会打电话给看起来像这样的光图功能:

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {...

输出参数将具有一个值,您可以参考以查看是否支持摄像机校准,称为iscameracalibrationDataDAdeLiverSupported,因此,例如,要打印出来,使用类似的内容:

print("isCameraCalibrationDataDeliverySupported: (output.isCameraCalibrationDataDeliverySupported)")

请注意,在我链接到的文档中,仅在特定方案中支持:

"此属性的值只有在 IsdualCameradualPhotOdeLiveryEnabled属性是正确的。启用 相机校准交付,设置 照片设置中 对象。"

这很重要,请注意这一点,以避免不必要的压力。使用实际值进行调试,并确保您启用了适当的环境。

有了所有这些,您应该从:

中获取实际的摄像机校准数据
photo.cameraCalibrationData

只需退出该对象以获取您要寻找的特定值,例如:

photo.cameraCalibrationData?.extrinsicMatrix
photo.cameraCalibrationData?.intrinsicMatrix
photo.cameraCalibrationData?.lensDistortionCenter
etc.

基本上您链接到的文档中列出的所有内容,我再次链接到。

还有一件事要注意,如果您只是寻找固有的矩阵,那么通过堆栈溢出中概述的方法,可以比其余的这些值更容易获得(即环境的严格)。如果您将其用于计算机视觉,这就是我正在使用的目的,这有时就是所需的一切。但是对于真正很酷的东西,您将需要所有内容。

您只能从深度数据输出或照片输出中获得Avcameracalibrationdata。

但是,如果您需要的只是FOV,则您只需要一部分提供的信息 - 相机内在矩阵 - 您可以从avcapturevideodataoutput中获得该信息。

在AvCaptureConnection上设置了CamerainTrinsicmatrixDelixDeliveryEnabled,将相机设备连接到捕获会话。(请注意,您应该先检查cameraintrinsicmatrixdeliveryspulported;并非所有捕获格式都支持内在。)

当视频输出供应示例缓冲区时,请检查每个样本缓冲区的附件kcmsamplebufferattachmentkey_cameraintrinsicmatrix键。如cmmsamplebuffer.h(有人应该提交有关将此信息输入在线文档中的雷达),该附件的值是编码MATRIX_FLOAT3X3的CFDATA,以及(0,0)和(1,1)元素矩阵是水平和垂直焦距。

相关内容

  • 没有找到相关文章

最新更新