// *** 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;
}
将这些点传递到内部。据我记得,我还挖掘了OpenCV中findHomography
的实现,并在某个位置内插入了这些行以解决步骤问题。在传递给解决步骤之前,OpenCV内部对这些点进行了一些规范化处理。因此,您需要跳过此类点的此步骤。
我们不在生产中使用它。用户需要通过提供图像上和米制系统中的线和点来手动校准相机。它的界面过于复杂且稳定性较差。但在您的情况下,我认为它可能会更有效。如果您能自动找到线条和对应关系。
请注意,在论文中他们使用了一些规范化技术。 它会提高稳定性。我们在旅程中遇到了稳定性问题,但未解决。
cv2.findHomography
结果的评估进行更新。 因此,可能可以构建一个迭代方法(findHomography->更新x->findHomography->更新x...)。 - fana