2016-01-16 16 views
1

Я реализовал модуль ArUco в opencv3.0, он отлично работает при обнаружении маркеров аруко.OpenCV3.0: Как обнаружить нормальный маркер с использованием библиотеки ArUco

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

enter image description here

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

enter image description here

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

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; 
} 

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

+0

Возможно, вы можете создать свой собственный словарь ([faq] (http://docs.opencv.org/master/d1/dcb/tutorial_aruco_faq.html#gsc.tab=0)) – Miki

ответ

0

В FAQ

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

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

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

Смежные вопросы