У меня есть программа для обнаружения маркеров aruco, я хотел бы использовать 1 маркер его позы для расчета по изображению с камеры с несколькими идентификаторами aruco.
У меня есть доска с идентификатором aruco 256, 257, 258. Проблема в том, что при просмотре идентификатора aruco 256 он вычислит все теги aruco на изображении, а не только идентификатор aruco 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));
}