摄影机坐标到像素坐标opencv

摄影机坐标到像素坐标opencv,opencv,camera-calibration,Opencv,Camera Calibration,我对opencv相机校准坐标变换感到困惑。我使用示例代码校准了我的相机,结果如下: 当我使用这个相机矩阵乘以相机坐标系中的一个点时,比如说p=[50,50,1.35],输出结果太大,不可能是像素坐标。这里怎么了?我错过什么了吗 图像为1920 x 1080。这是棋盘配置文件信息: 您可以在OpenCV中找到透视投影模型的不同方程式,也可以在下面的图片中进行说明 假设相机帧Fc中的点p=X,Y,Z,则其在标准化相机帧中的坐标为: x' = X/Z y' = Y/Z 假设没有失真,其在图像平面上的

我对opencv相机校准坐标变换感到困惑。我使用示例代码校准了我的相机,结果如下:

当我使用这个相机矩阵乘以相机坐标系中的一个点时,比如说p=[50,50,1.35],输出结果太大,不可能是像素坐标。这里怎么了?我错过什么了吗

图像为1920 x 1080。这是棋盘配置文件信息:


您可以在OpenCV中找到透视投影模型的不同方程式,也可以在下面的图片中进行说明

假设相机帧Fc中的点p=X,Y,Z,则其在标准化相机帧中的坐标为:

x' = X/Z
y' = Y/Z
假设没有失真,其在图像平面上的投影:

u = fx * x' + cx
v = fy * y' + cy
fx和fy表示像素的焦距,cx和cy表示图像中主点的坐标

在您的情况下,您的Z距离摄影机1.35,但其他两个坐标与Z坐标相比太远


数学上没有问题,只是您的点p对于您的相机不可见。

您可以在OpenCV中找到透视投影模型的不同方程式,也在下面的图片中进行了说明

假设相机帧Fc中的点p=X,Y,Z,则其在标准化相机帧中的坐标为:

x' = X/Z
y' = Y/Z
假设没有失真,其在图像平面上的投影:

u = fx * x' + cx
v = fy * y' + cy
fx和fy表示像素的焦距,cx和cy表示图像中主点的坐标

在您的情况下,您的Z距离摄影机1.35,但其他两个坐标与Z坐标相比太远


数学上没有问题,只是您的点p对于您的相机不可见。

完全有可能投影一个不在图像内部的点。你可以在X和Z或者Y和Z之间选择一个非常大的比率。这就像我想投射一个点,在Z方向上距离摄像机1.5米,但在X和Y方向上距离摄像机50米…@Catree我不太明白你说什么,你选择一个X和Z或Y和Z之间非常大的比率。这篇文章很好地解释了这个过程@DamianoDamiano,谢谢你的帖子。我明白这是个过程。但是我不明白为什么这个乘法不能预测P=[50,50,1.35]这一点。我认为缺少了一些东西。乘法没有问题,您可以在OpenCV中找到更多信息。点P在相机帧中为X=50,Y=50,Z=1.35。Z轴向前,X轴向右,Y轴向下。现在再读一遍我的比喻。同样,相机帧中的数学投影点不需要位于图像内部。它与相机一样,相机看不到你的点P。完全有可能投射出一个不在图像内部的点。你可以在X和Z或者Y和Z之间选择一个非常大的比率。这就像我想投射一个点,在Z方向上距离摄像机1.5米,但在X和Y方向上距离摄像机50米…@Catree我不太明白你说什么,你选择一个X和Z或Y和Z之间非常大的比率。这篇文章很好地解释了这个过程@DamianoDamiano,谢谢你的帖子。我明白这是个过程。但是我不明白为什么这个乘法不能预测P=[50,50,1.35]这一点。我认为缺少了一些东西。乘法没有问题,您可以在OpenCV中找到更多信息。点P在相机帧中为X=50,Y=50,Z=1.35。Z轴向前,X轴向右,Y轴向下。现在再读一遍我的比喻。同样,相机帧中的数学投影点不需要位于图像内部。它与摄像机一样,摄像机看不到你的点P。准确地说,你也可以计算所需的理论视场,你应该得到177°2*atan50/1.35。f、fx和fy之间有关系吗?假设f=1,方程应为u=1*x'+cx?@infoblock参见此或更多理论信息。准确地说,您也可以计算所需的理论视场,您应该得到177°2*atan50/1.35。f与fx和fy之间有关系吗?假设f=1,方程是否为u=1*x'+cx?@infoblock见此或更多理论信息。