我在 Python 2.7 中使用 OpenCV 3 来校准不同的相机。我使用 findCirclesGrid() 函数,它成功找到了4 x 11 圆形图案 http://robocraft.ru/files/opencv/acircles_pattern.png在 1 兆像素图像中。但是,当我尝试近距离检测具有更高分辨率的图像中的图案时,该功能失败。当物体在图像中距离较远时,仍然可以被检测到。我使用该函数如下:
ret, corners = cv2.findCirclesGrid(image, (4, 11), flags=cv2.CALIB_CB_ASYMMETRIC_GRID)
对于较大的图像,它会返回False, None
。该函数似乎无法处理面积太大的圆。我尝试添加cv2.CALIB_CB_CLUSTERING
,但这似乎没有什么区别。另外,似乎在 C++ 中用户可以表示使用 blobdetector,但在 Python 中则不行。细节:http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findcirclesgrid http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findcirclesgrid
我可以以某种方式增加最大检测大小或使该函数以其他方式检测模式吗?
编辑:我发现如何使用编辑 blobDetector 的参数
params = cv2.SimpleBlobDetector_Params()
params.maxArea = 100000
detector = cv2.SimpleBlobDetector_create(params)
ret, corners = cv2.findCirclesGrid(self.gray, (horsq, versq), None,
flags=cv2.CALIB_CB_ASYMMETRIC_GRID, blobDetector=detector)
但仍然是同样的问题。
编辑2:
现在添加cv2.CALIB_CB_CLUSTERING
解决问题!