Ask Your Question

Revision history [back]

ArUco changing used dictionary

GoodEvening, I'm quite new to OpenCV and ArUco. I need to calibrate a camera, I read the example found in the ArUco Utils "aruco_calibration.cpp" Then I saw that the ARUCO_MIP_36h12 chessboard table is used. So I modified a simple program that recognize the default aruco markers in order to detect the ARUCO_MIP_36h12 markers.

In particular i just call the function setDictionary and then the detect function as before. If I do in this way off course the default markers are not recognized anymore, but the MIP_36h12 markers are not recognized also!

            MyDetector.detect(InImage, Markers, CamParam, MarkerSize);

So, Changing the dictionary used is sufficent to detect markers of another type? I'm missing something obvious?

I can provide a more complete code if necessary, or whatever you want. Just for sake of completeness, I used this method to generate markers of the new dictionary

Dictionary dict = aruco::Dictionary::load("ARUCO_MIP_36h12");
int pixSize = 75;

string dict_name = dict.getName();
std::transform(dict_name.begin(), dict_name.end(), dict_name.begin(), ::tolower);
for (auto m : dict.getMapCode()) {
    string number = std::to_string(m.second);
    while (number.size() != 5) number = "0" + number;
    stringstream name;
    name << "C:/Users/utente/Desktop/DIZIONARIO/" + dict_name + "_" << number << ".png";
    cout << name.str() << endl;
    cv::imwrite(name.str(), dict.getMarkerImage_id(m.second, pixSize));

In the selected folder I see all the markers so I think I'm doing this in the right way (brutal). Thanks in advance for your support, Have a nice day :)