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

关于相机标定焦距、rvec/tvec选型及目标距离与世界坐标估算的技术问询

相机标定与距离/坐标估算问题解答

我使用棋盘格完成了PoE相机的标定,计划通过焦距估算已知实际尺寸目标与相机的距离。标定输出结果如下:

Camera Calibration:  1.7443757332593848

Camera Matrix:
 [[1.60769726e+03 0.00000000e+00 9.52018792e+02]
 [0.00000000e+00 1.60665029e+03 2.92296761e+02]
 [0.00000000e+00 0.00000000e+00 1.00000000e+00]]

Distortion Parameters:
 [[-0.21606616 -0.63180433 -0.00325319  0.00222699  1.98712916]]

Rotation Vectors:
 (array([[ 0.07224807],
       [-0.50125655],
       [-0.1803044 ]]), array([[ 0.09261887],
       [ 0.06385082],
       [-0.00816447]]), array([[ 0.08968368],
       [ 0.05769877],
       [-0.01871089]]), array([[9.03344928e-02],
       [1.21236810e-01],
       [2.69416301e-05]]), array([[0.11183268],
       [0.29111005],
       [0.03007957]]), array([[0.11217145],
       [0.42133195],
       [0.02784451]]), array([[0.14417592],
       [0.53619098],
       [0.04125443]]), array([[0.16017898],
       [0.67775563],
       [0.04417317]]), array([[ 0.04416578],
       [-0.02285857],
       [-0.01705777]]), array([[ 0.09415478],
       [-0.13700963],
       [-0.02052559]]), array([[ 0.09660401],
       [-0.27047429],
       [-0.02057789]]), array([[ 0.1023921 ],
       [-0.23873025],
       [-0.03277892]]), array([[ 0.10150192],
       [-0.35322471],
       [-0.07257268]]), array([[ 0.09091438],
       [-0.40158596],
       [-0.10816352]]), array([[ 0.06015935],
       [-0.50295236],
       [-0.12777835]]))

Translation Vectors:
 (array([[-0.0609731 ],
       [ 0.00573651],
       [ 0.39862613]]), array([[-0.1255173 ],
       [-0.00786904],
       [ 0.35559186]]), array([[-0.12519083],
       [-0.00685334],
       [ 0.353846  ]]), array([[-0.12417797],
       [-0.0180632 ],
       [ 0.41538341]]), array([[-0.10585784],
       [-0.01815088],
       [ 0.40054014]]), array([[-0.10077983],
       [-0.02083386],
       [ 0.40778494]]), array([[-0.1035432],
       [-0.020356 ],
       [ 0.4242453]]), array([[-0.10760302],
       [-0.03312439],
       [ 0.45943657]]), array([[-0.13239241],
       [-0.00820463],
       [ 0.33685892]]), array([[-0.11440255],
       [-0.00992325],
       [ 0.34370701]]), array([[-0.10157535],
       [-0.03602992],
       [ 0.32223598]]), array([[-0.12930068],
       [-0.00939119],
       [ 0.33570583]]), array([[-0.11115253],
       [-0.0047846 ],
       [ 0.30802406]]), array([[-0.14004492],
       [ 0.00104571],
       [ 0.33794211]]), array([[-0.05227404],
       [-0.01433328],
       [ 0.29691116]]))

20cm绿色目标

我还通过公式 focal_length = (actual_distance * image_object_height) / actual_object_height 计算焦距,结果在1250-1400之间,和标定得到的焦距差异较大,现提出以下技术问题:


问题1:估算已知实际尺寸的目标与相机之间的距离时,应选用哪个焦距?

  • 必须选用相机标定得到的焦距:相机矩阵中的1.60769726e+03(x轴方向)和1.60665029e+03(y轴方向),这是通过多组棋盘格图像计算出的最优内参,精度远高于单张图的估算结果。
  • 单张图计算焦距误差大的原因:实际距离、图像中目标高度的手动测量容易存在误差,且该公式未考虑镜头畸变的影响,而标定过程已经消除了畸变带来的系统误差。
  • 正确距离估算流程:先使用标定得到的畸变参数对图像做畸变校正,再用校正后图像中目标的像素尺寸,结合标定焦距和实际尺寸计算距离,公式调整为:
    distance = (actual_object_height * focal_length) / corrected_image_object_height
    

问题2:估算目标的世界坐标时,应使用相机标定得到的哪一组rvec和tvec,还是对直播流的每一帧使用cv2.solvePnP计算rvec和tvec?

  • 标定得到的多组rvec和tvec仅对应标定过程中每张棋盘格图像相对于相机的位姿,仅适用于当时的棋盘格场景,不能直接用于目标物体的位姿计算。
  • 正确做法:对直播流的每一帧图像,使用cv2.solvePnP计算目标的rvec和tvec。前提是你能在图像中识别出目标的至少4个已知世界坐标的特征点(比如目标的四个角,提前定义好它们的世界坐标),结合标定好的相机内参和畸变参数,解算出当前帧中目标相对于相机的位姿,进而推导目标的世界坐标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:45:54