gpt4 book ai didi

c++ - Aruco Marker 检测单个标记

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:00 24 4
gpt4 key购买 nike

我有一个用于检测 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));


}

最佳答案

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

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

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

关于c++ - Aruco Marker 检测单个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com