单应? OpenCV方法在一些视图中处理丢失的棋盘角落?

时间:2017-08-20 14:14:50

标签: python opencv camera-calibration cv2

我刚刚安装了OpenCV 3.2.0,我可以通过使用cv2.findChessboardCorners(left_gray, (6,5))或使用{来对比对比来找到来自this imagethis question中的许多/大多数角落{1}}中所述{1}}。

虽然findChessboardCorners要么返回所有6×5 = 30个或cv2.goodFeaturesToTrack(gray_img,25,0.01,10),我可以看到,对于质量较低的图像,有时不会找到所有点 {{ 1}} 方法

但是当我阅读the answer时,看起来对象点需要与每个视图的图像点一一对应。如果其中一个图像有缺失点,我必须找到它并将其从该图像的对象点列表中删除。

是否有一些cv2方法可以自动处理?

编辑:我现在想知道,None是否使用了我正在寻找的强大方法之一?

当然,如果外部行或列全部丢失,则存在无法解决的歧义,但如果缺少一些内部点,则仍应进行校准。

我可能会尝试写一些东西,当然只是拒绝任何带有错误数量的找到角落的视图,但如果已经存在一种处理非歧义导致缺失点的方法,我想尝试一下它首先。目标是尽可能自动化流程,而不会使用错误的已找到点数跳过每个图像。

1 个答案:

答案 0 :(得分:1)

您可以通过稍微更改正在使用的模式来处理此问题。你需要的是指定缺少哪些角落。 OpenCV有一个简单的解决方案:ChArUco板。下面我附上了该模式用法的教程。

http://docs.opencv.org/3.1.0/df/d4a/tutorial_charuco_detection.html

使用charuco,您可以自动指定检测到的角落。然后,您可以调整对象点进行校准。

如果您使用的是python,则需要使用aruco库的包装器:

https://github.com/opencv/opencv_contrib/pull/554/

https://github.com/fehlfarbe/python-aruco/

在python中使用charuco的一些答案:

http://answers.opencv.org/question/98447/camera-calibration-using-charuco-and-python/?answer=98451#post-id-98451/

简而言之,从linked tutorial开始,流程如下:

要定义CharucoBoard,必须使用定义生成模式,然后同时指定检测算法的描述:

  • X方向的棋盘格数。
  • Y方向的棋盘格数。
  • 方形长度。
  • 标记面长度。
  • 标记字典。
  • 所有标记的ID。

enter image description here

enter image description here