Skip to content

arucoモジュールでマーカーを検出する

atinfinity edited this page May 14, 2017 · 15 revisions

arucoモジュールでマーカーを検出する

はじめに

OpenCVのarucoモジュールはマーカーを検出する機能を提供しています.
ここではサンプルコードを交えながらマーカー検出機能の使い方を紹介します.

APIの説明

  • cv::aruco::detectMarkers:マーカーを検出する関数

    • 第一引数:検出対象の画像
    • 第二引数:cv::Ptrcv::aruco::Dictionary型の変数
      • 検出したいマーカーと同じDictionaryを指定する必要がある点に注意が必要です(サンプルコードではcv::aruco::DICT_4X4_50を指定)
    • 第三引数:検出したマーカーのコーナーを格納する変数
    • 第四引数:検出したマーカーの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)が描画されている

ことがわかります.

marker_detection_input marker_detection_output
入力画像 検出結果

おわりに

ここではOpenCVのarucoモジュールで提供されているマーカー検出機能の使い方を紹介しました.

参考URL

備考

筆者は以下の環境で動作確認しました.

  • OpenCV 3.2.0
  • Windows 10 Pro(64bit)
  • Visual Studio 2015 Professional

Menu

Computer Vision

GPGPU

AR

ROS

Docker

Jetson

ARM

プログラミング言語

開発環境

勉強会

Clone this wiki locally