Отслеживание маркеров Aruco с помощью нескольких маркеров из одного словаря

Я использую ChAruCo marker tracking от OpenCV Contrib. Я хотел бы отслеживать несколько досок, но механизм создания досок маркеров не такой, как я ожидал.

Я представляю себе наличие одного словаря (скажем, DICT_4X4_50) для создания множества маркеров с использованием различных диапазонов идентификаторов из словаря.
CharucoBoard::create() принимает словарь и использует маркеры 0-X для создания доски. Я хотел бы добавить смещение к началу диапазона.

Если я могу создать доски, cv::aruco::detectMarkers() выводит идентификаторы, которые могут определить, какая доска находится в поле зрения. Поддерживается ли это, и если нет, как мне отслеживать более одной цели?


person thewfool    schedule 19.11.2018    source источник
comment
Если я понял ваш вопрос, чтобы добавить offset. т. е. к 5 вы создаете словарь из 55 маркеров и используете только начиная с 5 до 55 (вы пренебрегаете первыми пятью маркерами. Второй вопрос, чтобы определить, какая доска находится в поле зрения, он уже выполняет эту задачу, в противном случае это точки непонятно для меня   -  person Y.AL    schedule 24.09.2019


Ответы (1)


Вы можете просто добавить смещение к элементам в идентификаторах векторов в классе Board. Я не могу сказать вам, поддерживается ли это, но мы использовали его для досок без чаруко, и он работал нормально. Поскольку индексы nearestMarkerIdx доски чаруко являются индексами в векторе ids, это должно работать нормально.

cv::Ptr<cv::aruco::CharucoBoard> board1 =  cv::aruco::CharucoBoard::create(3, 5, 0.32f, 0.08f, dictionary);
cv::Ptr<cv::aruco::CharucoBoard> board2 = cv::aruco::CharucoBoard::create(3, 5, 0.32f, 0.08f, dictionary);
int id_offset_board2 = board1->ids.size();
for(auto& id: board2->ids)
{
    id += id_offset_board2;
}
person PeterT    schedule 01.10.2019