Угловой метод уточнения, CORNER_REFINE_SUBPIX, из AcUro с Python и OpenCV - PullRequest
0 голосов
/ 31 октября 2018

Привет

Я хочу повысить точность обнаружения маркеров с помощью aruco.detectMarkers. Итак, я хочу использовать Угловой метод уточнения с 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?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

para.cornerRefinementMethod = 1 может работать.

0 голосов
/ 02 ноября 2018

Что касается первой части вашего вопроса, вы были довольно близки: я полагаю, ваша проблема в переключении и настройке параметров «пара». Если это так, вам нужно только установить соответствующие значения в объекте параметров, как

para.cornerRefinementMethod = aruco.CORNER_REFINE_SUBPIX

Обратите внимание, что "aruco.CORNER_REFINE_SUBPIX" - это просто целое число. Вы можете убедиться в этом, набрав type(aruco.CORNER_REFINE_SUBPIX) в консоли. Таким образом, присвоение значений объекту "para" работает, как указано выше.

Возможно, вы также захотите настроить para.cornerRefinementWinSize, который, кажется, реализован в единицах пикселей кода, а не в фактических единицах пикселей изображения.

Что касается второй части, вам, возможно, придется написать функцию, которая добавляет поля в угловых точках, которые вы можете получить с помощью функции detectMarker. Обратите внимание, что угловые точки всегда располагаются по часовой стрелке, поэтому вы можете легко назначить правильные значения смещения (например, «вверх и влево», «вверх и вправо» и т. Д.).

...