AcUro使用Python和OpenCV从角落优化方法CORNER_REFINE_SUBPIX

时间:2018-10-31 09:06:49

标签: python opencv aruco

嗨,那里

我想提高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中生成这些封闭的标记?

2 个答案:

答案 0 :(得分:0)

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

para.cornerRefinementMethod = aruco.CORNER_REFINE_SUBPIX

请注意,“ aruco.CORNER_REFINE_SUBPIX”只是一个整数。您可以通过在控制台中输入type(aruco.CORNER_REFINE_SUBPIX)进行验证。因此,将值分配给“ para”对象的工作原理如上所述。

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

关于第二部分,您可能必须编写一个函数,在角点处添加框,您可以使用detectMarker函数获得该框。请注意,拐角点始终按顺时针顺序排列,因此您可以轻松分配正确的偏移值(例如“上和左”,“上和右”等)。

答案 1 :(得分:0)

para.cornerRefinementMethod = 1 可能有效。