2

我刚刚安装了 OpenCV 3.2.0,我可以从这个问题中找到这个图像中的许多/大部分角落,方法是玩弄对比度然后使用或按照答案中的描述使用。cv2.findChessboardCorners(left_gray, (6,5))cv2.goodFeaturesToTrack(gray_img,25,0.01,10)

虽然 findChessboardCorners 要么返回所有 6×5=30 个,要么返回所有None点,但我可以看到,对于质量较低的图像,有时并非所有点都可以通过该 goodFeaturesToTrack 方法找到。

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

是否有一些 cv2 方法可以自动处理这个问题?

编辑:我现在想知道,正在cv2.findHomography()使用我在这里寻找的强大方法之一吗?

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

我可能会尝试写一些东西,当然只是拒绝任何发现角数错误的视图,但如果已经有一种现有的方法来处理不引起歧义的缺失点,我想先尝试一下。目标是尽可能地自动化该过程,而不会跳过每个找到错误数量的图像。

4

1 回答 1

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/


简而言之,从链接的教程中,过程如下:

要定义 CharucoBoard,需要使用定义生成模式,然后还要指定检测算法的描述:

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

在此处输入图像描述

在此处输入图像描述

于 2017-09-27T20:06:18.280 回答