【问题标题】:Aruco Marker detect a single markerAruco Marker 检测单个标记
【发布时间】:2019-03-08 11:22:47
【问题描述】:

我有一个用于检测 aruco 标记的程序,我想使用 1 个标记他的姿势来计算具有多个 aruco ID 的相机图像。

我有一个 aruco id 256、257、258 的电路板问题是,当看到 aruco id 256 时,它会计算图像中的所有 aruco 标签,而不仅仅是 aruco id 256。

有没有解决这个问题的方法,在我的代码下面。

**************代码**************

    // if marker detected = ID 256
for(int i = 0;i < ids.size();i++){
std::cout << "aruco ID: " << ids[i] << std::endl; //print de marker ID die we gevonden hebben
    if (ids[i]==256) // als de gedetecteerde marker gelijk is aan de gewenste marker 
    {
    std::cout << "aruco marker grootte in meters: " << actual_marker_length << std::endl;   
        cv::aruco::drawDetectedMarkers(image_copy, corners, ids); 
        std::vector<cv::Vec3d> rvecs, tvecs;
        cv::aruco::estimatePoseSingleMarkers(corners, actual_marker_length,
                camera_matrix, dist_coeffs, rvecs, tvecs);

        cv::aruco::drawAxis(image_copy, camera_matrix, dist_coeffs,
                rvecs[i], tvecs[i], 0.1);

        vector_to_marker.str(std::string());
        vector_to_marker << std::setprecision(4) 
                         << "x: " << std::setw(8)<<  tvecs[0](0);
        std::cout << "x: " << tvecs[0](0) << std::endl;

        cv::putText(image_copy, vector_to_marker.str(), 
                cvPoint(10, 30), cv::FONT_HERSHEY_SIMPLEX, 0.6, 
                cvScalar(0, 252, 124), 1, CV_AA);

        vector_to_marker.str(std::string());
        vector_to_marker << std::setprecision(4) 
                         << "y: " << std::setw(8) << tvecs[0](1);
        std::cout << "y: " << tvecs[0](1) << std::endl;

        cv::putText(image_copy, vector_to_marker.str(), 
                cvPoint(10, 50), cv::FONT_HERSHEY_SIMPLEX, 0.6, 
                cvScalar(0, 252, 124), 1, CV_AA);

    vector_to_marker.str(std::string());
    vector_to_marker << std::setprecision(4) 
    << "z: " << std::setw(8) << tvecs[0](2);

        berekenZ(ArucoMarker, tvecs[0](2));

    cv::putText(image_copy, vector_to_marker.str(), 
        cvPoint(10, 70), cv::FONT_HERSHEY_SIMPLEX, 0.6, 
        cvScalar(0, 252, 124), 1, CV_AA);

berekeningenIrLock(tvecs[0](0), tvecs[0](1), tvecs[0](2));


    }

【问题讨论】:

    标签: c++ opencv aruco


    【解决方案1】:

    如果您指的是绘制所有检测到的标记,我不确定您何时说“计算所有标记”。如果是这样,您的代码的问题是if 语句中的以下行。

    cv::aruco::drawDetectedMarkers(image_copy, corners, ids); 
    

    这会继续绘制所有检测到的ids,即使您只将rvec[i]tvec[i] 传递给drawAxis 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2022-01-20
      • 1970-01-01
      • 2016-10-05
      • 2022-08-21
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多