main.cpp#include <iostream>
#include <opencv2/opencv.hpp>
#include <apriltag.h>
#include <tag36h11.h>
using namespace std;
using namespace cv;
int main() {
apriltag_family_t *tf = tag36h11_create();
apriltag_detector_t *td = apriltag_detector_create();
apriltag_detector_add_family(td, tf);
VideoCapture cap(0);
cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
cap.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
while (1)
{
Mat frame, frame_gray;
bool isRead = cap.read(frame);
if (!isRead) { break; }
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
image_u8_t im = {.width = frame_gray.cols, .height = frame_gray.rows, .stride = frame_gray.cols, .buf = frame_gray.data};
zarray_t *detections = apriltag_detector_detect(td, &im);
for (int i = 0; i < zarray_size(detections); i++) {
apriltag_detection_t *det;
zarray_get(detections, i, &det);
putText(frame, to_string(det->id), Point(det->c[0],det->c[1]), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 1);
for (int i = 0; i < 4; ++i)
{
putText(frame, to_string(i), Point(det->p[i][0],det->p[i][1]), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255, 0, 0), 2);
int next = (i + 1) % 4;
cv::line(frame, Point(det->p[i][0],det->p[i][1]), Point(det->p[next][0],det->p[next][1]), cv::Scalar(0, 255, 0), 2);
}
apriltag_detection_destroy(det);
}
imshow("frame", frame);
waitKey(30);
zarray_destroy(detections);
}
apriltag_detector_destroy(td);
tag36h11_destroy(tf);
return 0;
}