Skip to main content

Aruco Marker

Prerequisites

Create Marker

main.py
import cv2

d = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)

# some other dicts:
# cv2.aruco.DICT_4X4_50
# cv2.aruco.DICT_4X4_100
# cv2.aruco.DICT_4X4_250
# cv2.aruco.DICT_4X4_1000

img = cv2.aruco.drawMarker(d, 0, 1000)
# 0 -> marker-id valid 0 .. 49
# 1000 -> marker-size in pixels

cv2.imwrite('img.png', img)

Example Output:

Aruco Marker

Detect Marker

main.cpp
#include "opencv2/opencv.hpp"
#include "opencv2/aruco.hpp"

cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);

auto dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50);
std::vector<std::vector<cv::Point2f>> id_corners;
std::vector<int> ids;
auto detectorParams = cv::aruco::DetectorParameters::create();
std::vector<std::vector<cv::Point2f>> rejected;

cv::aruco::detectMarkers(gray, dictionary, id_corners, ids, detectorParams, rejected);

for (int i = 0; i < ids.size(); i++) {
int id = ids[i];
auto corners = id_corners[i];
}