Python同质与非同质绘图线

标签 python opencv geometry

我发现了一个article这是关于对极几何的。

我计算了基本矩阵。现在我试图找到对应点所在的线,如文章中所述:

s

我计算了齐次坐标中的线。我怎样才能像示例中那样将这条线绘制到图片中?我考虑过将直线从齐次坐标转换为非齐次坐标。我认为这可以通过将xy除以z

来实现

例如同质:

x=0.0295
y=0.9996
z=-265.1531

不均匀:

x=0.0295/-265.1531
y=0.9996/-265.1531

所以:

x=-0.0001112564778612809
y=0.0037698974667842843

这些数字对我来说似乎是错误的,因为它们太小了。这是正确的方法吗? 如何将结果绘制到图像中?

最佳答案

您拥有的xyz是“极线”方程的参数,它们出现在“线中的线”下image”公式在幻灯片中,但分别标记为 abc,即:

au + bv + c = 0

这个问题的解决方案是线上的点。例如在Python中,我将a定义为图片x轴上的一些点,并求解b:

import numpy as np

F = np.array([
    [-0.00310695, -0.0025646,  2.96584],
    [-0.028094,   -0.00771621, 56.3813],
    [13.1905,    -29.2007,  -9999.79],
])

p_l = np.array([
    [343.53],
    [221.70],
    [  1.0],
])

lt = F @ p_l

# if you want to normalise
lt /= np.sqrt(sum(lt[:2] ** 2))

# should give your values [0.0295, 0.9996, -265.2]
print(lt)

a, b, c = lt.ravel()

x = np.array([0, 400])
y = -(x*a + c) / b

然后在这些点之间画一条线

关于Python同质与非同质绘图线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58219007/

相关文章:

jquery - 计算径向菜单的 Angular

iphone - 计算插入 CGRect 大小变化后的新原点

c++ - Kinect:从色彩空间到世界坐标

python - 循环列表修改

python - 绘制水平线(matplotlib)

c++ - 如何在 C++ 上可视化 3D 点

c++ - undistort 与 undistortPoints 用于校准图像的特征匹配

python - 在 Windows 上以 Vi 模式使用 Python shell

python - FutureWarning 未显示 warnings.simplefilter(action = "error", category=FutureWarning)

opencv - 安装 OpenCV3 后有没有办法恢复 OpenCV2.4.11?