我有一个字段中的点列表(如upper_goal_point/left_upper_outer_corner等).

enter image description here

我知道它们在目标图像中的对应坐标,所以我可以计算单应性:

h, status = cv2.findHomography(pts_src, pts_dst)

我在上角线上也有蓝色的点(看上图),which I only know that their destination's 100 coordinates are 0(因为它们在上角线上),但我不知道它们在那条线上的确切位置.

我可以使用这些蓝点来改善单应性吗?

附笔.

你可以看到单应性中的upper corner线不是水平线,而是对角线,这当然是不正确的:

enter image description here

推荐答案

实际上,在查找单应性时可以使用线对应.

https://www.researchgate.net/publication/220845575_Combining_Line_and_Point_Correspondences_for_Homography_Estimation

几年前,我们在一个项目中实施了这种方法.在简化所有数学的过程中,我们想出了一个简单的技巧.我们将每条线a*x + b*y + c = 0变换为点(a/c, b/c)

// ***  Don't copy paste this code, read below!  ***//
Point2f convertPointsToHomogeneousLine(Point2f p1, Point2f p2) {
    Point3f p1h(p1.x, p1.y, 1);
    Point3f p2h(p2.x, p2.y, 1);
    Point3f lineHomo(p1h.y*p2h.z - p1h.z*p2h.y,
                     p1h.z*p2h.x - p1h.x*p2h.z,
                     p1h.x*p2h.y - p1h.y*p2h.x);
    
    Point2f lineHomoNorm(lineHomo.x / lineHomo.z,
                         lineHomo.y / lineHomo.z);
    return lineHomoNorm;
}

然后把这些点传进go .我记得我也深入研究了findHomography的OpenCV实现,并在其中的某个地方插入这行代码来求解步骤.在OpenCV中,在通过求解步骤之前,对点应用了一些归一化.因此,对于这类点,您需要跳过这一步.

我们不在生产中使用它.用户需要通过在图像和仪表系统中提供线和点来手动校准摄像机.界面过于复杂, solidity 差.但在你的情况下,我认为它可以做得更好.如果你能自动找到行和对应关系.

P、 请注意,在本文中,他们使用了一些归一化技术.

Python-3.x相关问答推荐

Paramiko SFTPClient get()和put()函数的通过/失败结果?

如何通过Pandas为不同的列集垂直设置列数据?

将strid()映射到Pandas DataFrame中的字符串不会更改NaN条目,但仍然声称它们不同?

可以在 Python 的上下文管理器中调用 sys.exit() 吗?

链接列未延伸到数据框的末尾

我想使用命令提示符安装 cv2

Jupyter Notebook 拒绝打印一些字符串

如果网站加载时间过长,如何强制 Selenium 刷新

这种类型提示有什么作用?

用于 BIG 数组计算的多处理池映射比预期的要慢

每个数据行中每个数据帧值的总和

pip install mysqlclient 失败为 mysqlclient 运行 setup.py bdist_wheel ... 错误

从 Python2 到 Python3 的这种解包行为的变化是什么?

为什么 setattr 在绑定方法上失败

如何从 Python 3.5 降级到 Python 3.4

sys.stdin.readline() 和 input():读取输入行时哪个更快,为什么?

在 WSL (Ubuntu) 中为 python3 安装 venv

谁能给我一个 Python 3 中标准输入和标准输出的快速教程?

在 macbook pro M1 上安装 Tensorflow 时出现zsh:非法硬件指令 python

三个参数的reduce函数