OpenCV3.0: Как обнаружить нормальный маркер с помощью библиотеки ArUco

Я реализовал модуль ArUco в opencv3.0, он прекрасно работает при обнаружении маркеров aruco.

Для обнаружения маркера aruco я использую это изображение

введите описание изображения здесь

Но возможно ли обнаружить нормальные маркеры, подобные изображенному ниже, с помощью модуля aruco?

введите описание изображения здесь

Вот некоторые фрагменты моего кода:

aruco::DetectorParameters detectorParams;
if (parser.has("dp")) {
bool readOk = readDetectorParameters(parser.get<string>("dp"), detectorParams);
if (!readOk) {
cerr << "Invalid detector parameters file" << endl;
return 0;
}
}

aruco::Dictionary dictionary =
aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME(dictionaryId));

Mat camMatrix, distCoeffs;
if (estimatePose) {
bool readOk = readCameraParameters(parser.get<string>("c"), camMatrix, distCoeffs);
if (!readOk) {
cerr << "Invalid camera file" << endl;
return 0;
}
}

// detect markers and estimate pose
aruco::detectMarkers(image, dictionary, corners, ids, detectorParams, rejected);
if (estimatePose && ids.size() > 0)
aruco::estimatePoseSingleMarkers(corners, markerLength, camMatrix, distCoeffs, rvecs,
tvecs);

// draw results
image.copyTo(imageCopy);
if (ids.size() > 0) {
aruco::drawDetectedMarkers(imageCopy, corners, ids);

if (estimatePose) {
for (unsigned int i = 0; i < ids.size(); i++)
aruco::drawAxis(imageCopy, camMatrix, distCoeffs, rvecs[i], tvecs[i],
markerLength * 0.5f);
}
}

if (showRejected && rejected.size() > 0)
aruco::drawDetectedMarkers(imageCopy, rejected, noArray(), Scalar(100, 0, 255));

imshow("out", imageCopy);
char key = (char)waitKey(waitTime);
if (key == 27) break;
}

Как я могу сделать этот код для обнаружения нормальных маркеров?

1

Решение

в Часто задаваемые вопросы

Should I use a predefined dictionary or generate my own dictionary?

В общем, проще использовать один из предопределенных словарей. Однако, если вам нужен больший словарь (с точки зрения количества маркеров или количества бит), вы должны создать свой собственный словарь. Создание словаря также полезно, если вы хотите максимизировать расстояние между маркерами, чтобы добиться лучшей коррекции ошибок на этапе идентификации.

Я думаю, что это именно ваш случай, вы хотите использовать то, чего нет в стандартном словаре ArUco. Словарь это просто учебный класс, вам нужно создать его и заполнить его правильными данными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]