首页 > 解决方案 > 根据相机位置查找两个原点之间的平移

问题描述

我已经根据相机视野中的两个原点确定了相机位置。假设原点 1 位于 (140,200),原点 2 位于 (70,180)。

以下是相对于原点 1 和原点 2 的相机位置。

X1,Y1,Z1,X2,Y2,Z2 = 0.8361721744324895,-0.5131803297263005,1.3708440418732257,0.09985411281689659,0.3329507542440152,1.342809058827907

而 (X1, Y1, Z1) 是相对于原点 1 的相机位置,而 (X2, Y2, Z2) 是相对于原点 2 的相机位置。

我使用以下代码来计算两个来源之间的转换。

dist = math.sqrt((X1-X2) ** 2 + (Y1-Y2) **2 + (Z1-Z2)**2)

但是,该值是一个标量,而不是基于它们各自相机位置的原点之间的平移的向量 (XYZ) 值。如何获得 XYZ 距离?

标签: pythonopencvcameraopencv-solvepnp

解决方案


除了你的两个起源之外,考虑第三个起源。

对于这第三个原点,让相机、第一原点和第二原点的位置向量分别为r_cr_1r_2

相对于第一个原点,令相机的位置向量为r_c_1

相对于第二个原点,令相机的位置向量为r_c_2

使用--向量减法的符号,我们有:

r_c_1 = r_c -- r_1

r_c_2 = r_c -- r_2

从上述两个方程中,从另一个方程中减去一个方程,我们得到:

r_c_2 -- r_c_1 = (r_c -- r_2) -- (r_c -- r_1)

其中,在简化时,给出:

r_c_2 -- r_c_1 = r_1 -- r_2

在上面的等式中,RHS 就是你想要的(两个原点之间的平移向量)。LHS 是两个原点下相机位置之间的矢量减法。

因此,如果向量以 3 元组表示法表示,则分别为 letr_c_1r_c_2be(x1, y1, z1)(x2, y2, z2)。然后,从上面的等式,需要“原点平移向量”将(x2-x1, y2-y1, z2-z1)


推荐阅读