ArUco Module에서 생성한 마커의 ID 획득

개요



OpenCV의 Contrib에 있는 ArUco Module에서 생성한 마커의 ID를 콘솔에 내 보았습니다. 마커를 생성한 후 해당 마커 이미지를 웹캠에서 가져오고 화면에 표시된 마커의 ID를 콘솔에 출력했습니다. 다음 절차는 마커 생성에서 ID 획득 프로그램과 실행을 보여줍니다. Visual studio에서 ArUco Module을 사용할 수 있도록 하는 순서는 참고 URL을 나타내므로, 그 순서대로 진행하면 사용할 수 있게 된다고 생각합니다.

실행 환경



다음은 실행 환경을 보여줍니다.


소프트와 하드
버전


Visual Studio
2017

OpneCV
4.0.0

OpenCVContrib
4.0.0


Visual Studio에서 ArUco Module을 사용할 수 있도록 하는 단계는 다음 참조 URL을 매우 이해하기 쉬웠습니다.
  • Visual Studio 2017에 OpenCV3.2.0 및 opencv_contrib을 도입하는 방법

  • 아래에 표시된 거친 흐름은 다음과 같습니다.
  • 마커 생성
  • 마커 ID 취득 프로그램
  • 마커 ID 취득 프로그램 실행

  • 마커 생성



    ArUco Module의 마커 생성에 관해서는, 다음의 github에 알기 쉽게 써 있는 프로그램을 실행하는 것으로, 생성할 수 있습니다. 또, 사용하고 있는 함수의 내용도 간단히 걸려 있기 때문에, 스스로 조금 조금 괴롭힐 수 있다고 생각합니다.
  • aruco 모듈로 마커 생성

  • 마커 ID 취득 프로그램



    다음에 작성한 마커 ID 취득 프로그램을 나타냅니다. 카메라는 USB 카메라를 사용했습니다.

    get_markers_id.cpp
    #include <iostream>
    #include "opencv2/opencv.hpp"
    #include "opencv2/aruco.hpp"
    
    // Get MarkersID
    void ShowMarkerIdsFunction(cv::OutputArray in) {
        std::vector<cv::Mat> marker_ids;
        in.getMatVector(marker_ids);
        std::cout << "Marker IDs : "<< std::endl;
        for (auto marker_ids : marker_ids) {
            std::cout << marker_ids << std::endl;
        }
    }
    
    int main(int argh, char* argv[])
    {
        // Create Marker Dictionary, Type of marker : 7X7,1000
        const cv::aruco::PREDEFINED_DICTIONARY_NAME dictionary_name = cv::aruco::DICT_7X7_1000;
        cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(dictionary_name);
        std::vector<int> marker_ids;
        std::vector<std::vector<cv::Point2f>> marker_corners;
        int sum_ids = 0;
        cv::Mat web_camera_frame;
        cv::VideoCapture cap(1);
    
        // Confirm web camera connection
        if (!cap.isOpened())
        {
            printf("web camera : Bad Connection\n");
            return -1;
        }
    
        // Recognition MarkersID with ArUco
        while (cap.read(web_camera_frame))
        {
            // Detect markers
            cv::Ptr<cv::aruco::DetectorParameters> parameters = cv::aruco::DetectorParameters::create();
            cv::aruco::detectMarkers(web_camera_frame, dictionary, marker_corners, marker_ids, parameters);
            cv::aruco::drawDetectedMarkers(web_camera_frame, marker_corners, marker_ids);
    
            sum_ids = marker_ids.size();
            cv::imshow("from camera", web_camera_frame);
    
            // Show MarkerID and  sum of IDs in console
            ShowMarkerIdsFunction(marker_ids);
            std::cout << "sum IDs:" << sum_ids << std::endl;
    
            const int key = cv::waitKey(1);
            if (key == 'q'){
                break;
            }
            else if (key == 's'){
                cv::imwrite("Marker_ids_recognized.png", web_camera_frame);
            }
        }
        cv::destroyAllWindows();
        return 0;
    }
    
    

    마커 ID 취득 프로그램 실행



    실행 시 카메라 이미지와 콘솔 상태는 다음과 같습니다.
  • 전체 이미지
  • 카메라 취득 이미지
  • 콘솔 이미지

  • 요약



    ArUco Module은 쉽게 AR을 시도 할 수 있으므로 매우 재미 있습니다. 또, 잘못하고 있는 곳이나, 추가하는 편이 좋다, 이런 쓰는 쪽이 좋다! 라는 부분이 있으면 가르쳐 주시면 매우 기쁩니다.

    좋은 웹페이지 즐겨찾기