2016-01-16 2 views
1

J'ai implémenté le module ArUco dans opencv3.0 il fonctionne parfaitement tout en détectant les marqueurs aruco.OpenCV3.0: Comment détecter le marqueur normal à l'aide de la bibliothèque ArUco

Pour la détection aruco marqueur je suis en utilisant cette image

enter image description here

Mais est-il possible de détecter des marqueurs normaux comme cette image ci-dessous à l'aide aruco module?

enter image description here

Voici quelques extraits de mon code:

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

Comment puis-je faire ce code pour détecter les marqueurs normaux?

+0

Probablement, vous pouvez générer votre propre dictionnaire ([faq] (http://docs.opencv.org/master/d1/dcb/tutorial_aruco_faq.html#gsc.tab=0)) – Miki

Répondre

0

Dans le FAQ

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

En général, il est plus facile d'utiliser l'un des dictionnaires prédéfinis. Cependant, si vous avez besoin d'un dictionnaire plus grand (en termes de nombre de marqueurs ou de nombre de bits), vous devez générer votre propre dictionnaire. La génération de dictionnaire est également utile si vous voulez maximiser la distance entre les marqueurs pour obtenir une meilleure correction d'erreur pendant l'étape d'identification.

Je pense que c'est exactement votre cas, vous voulez utiliser quelque chose qui ne figure pas dans le dictionnaire ArUco standard. Un dictionnaire est simplement un class, vous devez en créer un et le remplir avec les données correctes.