首页 > 解决方案 > AcUro 使用 Python 和 OpenCV 提供的边角优化方法 CORNER_REFINE_SUBPIX

问题描述

你好呀

我想从 aruco.detectMarkers 提高标记检测的准确性。因此,我想将Corner Refine Method 与 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 很陌生,所以我希望有一个简单而明显的解决方案。

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

标签: pythonopencvaruco

解决方案


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

para.cornerRefinementMethod = aruco.CORNER_REFINE_SUBPIX

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

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

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


推荐阅读