-
Notifications
You must be signed in to change notification settings - Fork 13
arucoモジュールでボードを生成する
atinfinity edited this page May 14, 2017
·
20 revisions
OpenCVのarucoモジュールはボードを生成する機能を提供しています.
ここではサンプルコードを交えながらボード生成機能の使い方を紹介します.
-
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_separation
とmargins
の関係を示します.
ここではOpenCVのarucoモジュールで提供されているボード生成機能の使い方を紹介しました.
- http://docs.opencv.org/3.2.0/de/d05/classcv_1_1aruco_1_1GridBoard.html
- http://docs.opencv.org/3.2.0/db/da9/tutorial_aruco_board_detection.html
- https://github.com/opencv/opencv_contrib/blob/3.2.0/modules/aruco/samples/create_board.cpp
筆者は以下の環境で動作確認しました.
- OpenCV 3.2.0
- Windows 10 Pro(64bit)
- Visual Studio 2015 Professional