arucoモジュールでマーカーを検出する - atinfinity/lab GitHub Wiki
OpenCVのarucoモジュールはマーカーを検出する機能を提供しています.
ここではサンプルコードを交えながらマーカー検出機能の使い方を紹介します.
- 
cv::aruco::detectMarkers:マーカーを検出する関数- 第一引数:検出対象の画像
- 第二引数:cv::Ptrcv::aruco::Dictionary型の変数
- 検出したいマーカーと同じDictionaryを指定する必要がある点に注意が必要です(サンプルコードではcv::aruco::DICT_4X4_50を指定)
 
- 検出したいマーカーと同じDictionaryを指定する必要がある点に注意が必要です(サンプルコードでは
- 第三引数:検出したマーカーのコーナーを格納する変数
- 第四引数:検出したマーカーのIDを格納する変数
- 第五引数:cv::Ptrcv::aruco::DetectorParameters型の変数
 
- 
cv::aruco::drawDetectedMarkers:検出したマーカーを描画する関数- 第一引数:検出したマーカーを描画する画像
- 第二引数:検出したマーカーのコーナー
- 第三引数:検出したマーカーのID
 
#include <opencv2/core.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
int main(int argc, const char* argv[])
{
    cv::Mat image = cv::imread("marker_detection_input.png", cv::IMREAD_UNCHANGED);
    if (image.empty())
    {
        std::cerr << "Failed to open image file." << std::endl;
        return -1;
    }
    // dictionary生成
    const cv::aruco::PREDEFINED_DICTIONARY_NAME dictionary_name = cv::aruco::DICT_4X4_50;
    cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(dictionary_name);
    // マーカーの検出
    std::vector<int> marker_ids;
    std::vector<std::vector<cv::Point2f>> marker_corners;
    cv::Ptr<cv::aruco::DetectorParameters> parameters = cv::aruco::DetectorParameters::create();
    cv::aruco::detectMarkers(image, dictionary, marker_corners, marker_ids, parameters);
    // 検出したマーカーの描画
    cv::aruco::drawDetectedMarkers(image, marker_corners, marker_ids);
    cv::imshow("marker_detection", image);
    cv::waitKey(0);
    return 0;
}以下に入力画像と検出結果を示します.この検出結果から
- 検出したマーカーの領域が緑色の線で囲まれている
- 検出したマーカーの原点に赤色の矩形が描画されている
- 検出したマーカーのID(この例ではid=0)が描画されている
ことがわかります.
|  |  | 
|---|---|
| 入力画像 | 検出結果 | 
ここではOpenCVのarucoモジュールで提供されているマーカー検出機能の使い方を紹介しました.
- http://docs.opencv.org/3.2.0/d9/d6a/group__aruco.html
- http://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html
- https://github.com/opencv/opencv_contrib/blob/3.2.0/modules/aruco/samples/detect_markers.cpp
- 開発メモ その59 OpenCV 3.2 with ContribモジュールでArUcoを使用する – A certain engineer "COMPLEX"
筆者は以下の環境で動作確認しました.
- OpenCV 3.2.0
- Windows 10 Pro(64bit)
- Visual Studio 2015 Professional