Skip to content

arucoモジュールでボードを生成する

atinfinity edited this page May 14, 2017 · 20 revisions

arucoモジュールでボードを生成する

はじめに

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

APIの説明

  • cv::aruco::GridBoard::create:GridBoardオブジェクトを生成する関数

    • 第一引数:x方向に配置するマーカー数
    • 第二引数:y方向に配置するマーカー数
    • 第三引数:マーカーのサイズ(ピクセル単位)
    • 第四引数:マーカー間の間隔(ピクセル単位)
    • 第五引数:定義済みの辞書名
  • cv::aruco::GridBoard::draw:ボード画像を生成する関数

    • 第一引数:ボード画像のサイズ
    • 第二引数:マーカー画像を格納する変数
    • 第三引数:ボード画像の余白サイズ(ピクセル単位)

サンプルコード

#include <opencv2/core.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/highgui.hpp>

int main(int argc, const char* argv[])
{
    const int markers_x         = 3;   // x方向に配置するマーカー数
    const int markers_y         = 2;   // y方向に配置するマーカー数
    const int marker_length     = 100; // マーカーのサイズ
    const int marker_separation = 20;  // マーカー間の間隔

    // 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);

    // GridBoardオブジェクト生成
    cv::Ptr<cv::aruco::GridBoard> grid_board = cv::aruco::GridBoard::create(markers_x, markers_y, 
        marker_length, marker_separation, dictionary);

    // ボード画像生成
    const int margins = 40;
    cv::Size img_size;
    img_size.width  = markers_x * (marker_length + marker_separation) - marker_separation + 2 * margins;
    img_size.height = markers_y * (marker_length + marker_separation) - marker_separation + 2 * margins;
    cv::Mat board_img;
    grid_board->draw(img_size, board_img, margins);

    // 生成したボード画像を表示
    cv::imshow("aruco grid board", board_img);
    cv::waitKey(0);

    return 0;
}

marker_separationはマーカー間の間隔,marginsはボード画像の余白となっています.
下図にmarker_separationmarginsの関係を示します.

grid_board_param

実行結果

grid_board

おわりに

ここでは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