【发布时间】:2017-02-03 19:56:24
【问题描述】:
我在 Python 2.7 中使用 OpenCV 3 来校准不同的相机。我使用 findCirclesGrid() 函数,它成功地在 1 兆像素图像中找到了 4 by 11 circle pattern。但是,当我尝试在更高分辨率的图像中近距离检测图案时,该功能会失败。当物体在图像中距离较远时,仍然会被检测到。我使用函数如下:
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
我可以以某种方式增加最大检测大小或让函数以其他方式检测模式吗?
编辑:我发现了如何使用来编辑 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 即可解决问题!
【问题讨论】:
-
如果您(以编程方式)调整图像大小,它会起作用吗?您可以尝试一些尺寸并尝试所有尺寸。只需确保之后重新调整检测到的圆圈以适合原始大小的图像。
-
也许,但这不会使大分辨率变得多余吗?这意味着我只能得到重新缩放图像的精度。
-
那么您可能需要查看源代码是否/为什么存在检测限制。如果您尝试调整大小的解决方案,您可以对检测到的圆圈进行后处理以进行细化以获得更高的精度(手动检测每个圆圈并使用先前检测到的网格连接)
-
是的,我会看看这两个选项。感谢您的想法。
标签: python opencv camera-calibration