Aruco码生成、检测测试记录

Aruco码生成、检测测试记录

Aruco码是opencv自带的库,比Apriltag相比,不用额外的编译其他的库,便于部署。

一、Aruco码生成

Vs2019环境下,配置好opencv环境即可,代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/aruco.hpp>
#include <iostream>

int main() {
    // 创建Aruco字典
    cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);

    // 生成单个标记
    int markerId = 1; // 标记ID
    int markerSize = 400; // 标记大小(像素)
    cv::Mat markerImage;

    // 生成Aruco码图像
    cv::aruco::drawMarker(dictionary, markerId, markerSize, markerImage, 1);

    // 显示生成的Aruco码
    cv::imshow("Generated Marker", markerImage);
    cv::waitKey(0);

    // 保存生成的Aruco码到文件
    std::string filename = "marker_" + std::to_string(markerId) + ".png";
    cv::imwrite(filename, markerImage);

    std::cout << "Marker saved as " << filename << std::endl;

    return 0;
}

二、检测Aruco码

代码如下:

#include <opencv2/opencv.hpp>
#include <opencv2/aruco.hpp>
#include <iostream>

int main() {
    // 创建Aruco字典
    cv::Ptr<cv::aruco::Dictionary> dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);

    // 读取包含Aruco码的图像
    std::string imagePath = "D:/work/C++Code/Aruco/Aruco/test.jpg"; // 替换为你的图像路径
    cv::Mat image = cv::imread(imagePath);
    if (image.empty()) {
        std::cerr << "Could not open or find the image!" << std::endl;
        return -1;
    }

    // 检测Aruco码
    std::vector<int> ids;
    std::vector<std::vector<cv::Point2f>> corners;
    cv::aruco::detectMarkers(image, dictionary, corners, ids);

    // 绘制检测到的Aruco码边界框
    cv::aruco::drawDetectedMarkers(image, corners, ids);

    // 输出每个检测到的Aruco码的信息
    for (size_t i = 0; i < ids.size(); ++i) {
        std::cout << "Marker ID: " << ids[i] << std::endl;
        std::cout << "Corner coordinates:" << std::endl;
        for (const auto& corner : corners[i]) {
            std::cout << "(" << corner.x << ", " << corner.y << ")" << std::endl;
        }
        std::cout << std::endl;
    }

    // 显示结果图像
    //cv::imshow("Detected Markers", image);
    //cv::waitKey(0);
    //保存结果图像
    cv::imwrite("Output_img.jpg", image);
    return 0;
}

运行结果如下图
在这里插入图片描述
检测图像如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小俊俊的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值