-
Notifications
You must be signed in to change notification settings - Fork 13
arucoモジュールでマーカーを検出する
atinfinity edited this page May 14, 2017
·
15 revisions
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