角优化方法,CORNER_REFINE_SUBPIX,来自 AcUro 和 Python 以及 OpenCV

Corner Refine Method, CORNER_REFINE_SUBPIX, from AcUro with Python and OpenCV

你好

我想提高 aruco.detectMarkers 标记检测的准确性。所以,我想使用Corner Refine Method with CORNER_REFINE_SUBPIX,但我不明白它在python中是如何实现的。

示例代码:

frame = cv.imread("test.png") 
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
para = aruco.DetectorParameters_create()
det_corners, ids, rejected = aruco.detectMarkers(gray,dictionary,parameters=para)
aruco.drawDetectedMarkers(frame,det_corners,ids)

我尝试过的事情:

para.cornerRefinementMethod()
para.cornerRefinementMethod(aruco.CORNER_REFINE_SUBPIX)
para.cornerRefinementMethod.CORNER_REFINE_SUBPIX
para = aruco.DetectorParameters_create(aruco.CORNER_REFINE_SUBPIX)
para = aruco.DetectorParameters_create(para.cornerRefinementMethod(aruco.CORNER_REFINE_SUBPIX))

他们没有用,我是 python ArUco 的新手,所以我希望有一个简单明了的解决方案。

我也想像 Documentation(第 4 页)那样实现封闭标记。您是否碰巧知道是否有办法在 python 中生成这些封闭的标记?

关于你问题的第一部分,你非常接近:我认为你的问题在于切换和调整 "para" 选项。如果是这样,你只需要在参数对象中设置相应的值like

para.cornerRefinementMethod = aruco.CORNER_REFINE_SUBPIX

请注意 "aruco.CORNER_REFINE_SUBPIX" 只是一个整数。您可以通过在控制台中键入 type(aruco.CORNER_REFINE_SUBPIX) 来验证这一点。因此,为 "para" 对象赋值就像上面提到的那样。

您可能还想调整 para.cornerRefinementWinSize,它似乎是以代码像素为单位而不是以实际图像像素为单位实现的。

关于第二部分,您可能需要编写一个函数,在角点处添加框,您可以使用 detectMarker 函数获得。请注意,角点始终按顺时针顺序排列,因此您可以轻松分配正确的偏移值(如 "up & left"、"up & right" 等)。

para.cornerRefinementMethod = 1 可能工作。