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

如何通过移动应用或浏览器获取智能手机相机内参及畸变系数?

获取智能手机相机内参及畸变系数的方法

iOS平台

原生应用开发

iOS 10及以上系统可通过AVFoundation框架的AVCaptureCameraCalibrationData类直接获取硬件标定的相机参数:

  • 在拍照回调中,从AVCapturePhoto实例提取校准数据:
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    guard let calibrationData = photo.cameraCalibrationData else { return }
    // 3x3相机内参矩阵
    let intrinsicMatrix = calibrationData.intrinsicMatrix
    // 畸变系数(通常为k1, k2, p1, p2, k3)
    let distortionCoefficients = calibrationData.lensDistortionCoefficients
}

这些参数是硬件出厂标定值,精度较高,且对应当前拍摄会话的分辨率。

浏览器(Web)

目前Web标准未提供直接访问相机内参或畸变系数的API,浏览器出于隐私和兼容性考虑不会暴露底层硬件参数。只能通过手动标定计算:

  • 用getUserMedia获取相机视频流,页面显示棋盘格模板;
  • 引导用户拍摄不同角度、距离的棋盘格画面;
  • 借助OpenCV.js等前端视觉库,调用calibrateCamera算法计算参数。

Android平台

原生应用开发

Android 5.0(API 21)及以上推荐用Camera2 API获取硬件标定参数:

  • 通过CameraManager读取相机特性中的参数:
val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
val cameraId = "0" // 0为后置摄像头,1为前置
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
// 3x3内参矩阵(数组顺序:fx, 0, cx, 0, fy, cy, 0, 0, 1)
val intrinsicParams = characteristics.get(CameraCharacteristics.KEY_LENS_INTRINSIC_PARAMETERS)
// 畸变系数(数组顺序:k1, k2, p1, p2, k3)
val distortionParams = characteristics.get(CameraCharacteristics.KEY_LENS_DISTORTION)

注意:参数对应相机默认分辨率,使用自定义分辨率时需确认部分设备是否需要重新映射。

浏览器(Web)

与iOS Web场景一致,无原生API支持直接获取参数。解决方案为前端手动标定:

  • 通过navigator.mediaDevices.getUserMedia获取相机流;
  • 加载OpenCV.js实现棋盘格标定流程;
  • 收集足够样本后调用算法计算内参和畸变系数。

注意事项

  • 原生应用获取的参数是硬件出厂标定值,精度远高于手动标定;
  • 同一设备的前后置摄像头参数完全不同,需分别获取;
  • 手动标定时,样本数量、拍摄角度、光照条件会直接影响结果精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:42:51