我刚刚安装了OpenCV 3.2.0,我可以通过使用cv2.findChessboardCorners(left_gray, (6,5))
或使用{来对比对比来找到来自this image的this question中的许多/大多数角落{1}}中所述{1}}。
虽然findChessboardCorners要么返回所有6×5 = 30个或cv2.goodFeaturesToTrack(gray_img,25,0.01,10)
,我可以看到,对于质量较低的图像,有时不会找到所有点 {{ 1}} 方法。
但是当我阅读the answer时,看起来对象点需要与每个视图的图像点一一对应。如果其中一个图像有缺失点,我必须找到它并将其从该图像的对象点列表中删除。
是否有一些cv2方法可以自动处理?
编辑:我现在想知道,None
是否使用了我正在寻找的强大方法之一?
当然,如果外部行或列全部丢失,则存在无法解决的歧义,但如果缺少一些内部点,则仍应进行校准。
我可能会尝试写一些东西,当然只是拒绝任何带有错误数量的找到角落的视图,但如果已经存在一种处理非歧义导致缺失点的方法,我想尝试一下它首先。目标是尽可能自动化流程,而不会使用错误的已找到点数跳过每个图像。
答案 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的一些答案:
简而言之,从linked tutorial开始,流程如下:
要定义CharucoBoard,必须使用定义生成模式,然后同时指定检测算法的描述: