test end of session

This commit is contained in:
Thomas BONNIER 2024-12-19 11:38:24 +01:00
parent ebf1f7480f
commit 8dbd79d5a4
2 changed files with 58 additions and 2 deletions

View File

@ -100,7 +100,17 @@ void processFrame(cv::Mat& frame)
// Apply image processing steps
cv::Mat processedFrame = enhanceImage(frame);
// Create ArUco marker detector
// Create ArUco marker detector with modified parameters
cv::Ptr<cv::aruco::DetectorParameters> parameters = cv::aruco::DetectorParameters::create();
parameters->adaptiveThreshWinSizeMin = 3;
parameters->adaptiveThreshWinSizeMax = 23;
parameters->adaptiveThreshWinSizeStep = 5;
parameters->minMarkerPerimeterRate = 0.005;
parameters->maxMarkerPerimeterRate = 3.0;
parameters->perspectiveRemoveIgnoredMarginPerCell = 0.05;
parameters->cornerRefinementMethod = cv::aruco::CORNER_REFINE_SUBPIX;
parameters->polygonalApproxAccuracyRate = 0.025;
cv::Ptr<cv::aruco::Dictionary> dictionary =
cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_1000);
std::vector<int> markerIds;
@ -108,7 +118,30 @@ void processFrame(cv::Mat& frame)
std::vector<cv::Vec3d> rvecs, tvecs;
// Detect markers in the image
cv::aruco::detectMarkers(processedFrame, dictionary, markerCorners, markerIds);
cv::aruco::detectMarkers(processedFrame, dictionary, markerCorners, markerIds, parameters);
// If no markers are detected, try multi-scale detection
if (markerIds.empty())
{
for (double scale = 0.5; scale <= 2.0; scale += 0.5)
{
cv::Mat scaledFrame;
cv::resize(processedFrame, scaledFrame, cv::Size(), scale, scale);
cv::aruco::detectMarkers(scaledFrame, dictionary, markerCorners, markerIds, parameters);
if (!markerIds.empty())
{
// Scale back the marker corners to the original frame size
for (auto& corners : markerCorners)
{
for (auto& corner : corners)
{
corner /= scale;
}
}
break;
}
}
}
// Draw detected markers
if (!markerIds.empty())

View File

@ -151,6 +151,29 @@ void processFrame(cv::Mat& frame, std::map<int, cv::Point2f>& markerPositions, c
// Detect markers in the image
cv::aruco::detectMarkers(processedFrame, dictionary, markerCorners, markerIds, parameters);
// If no markers are detected, try multi-scale detection
if (markerIds.empty())
{
for (double scale = 0.5; scale <= 2.0; scale += 0.5)
{
cv::Mat scaledFrame;
cv::resize(processedFrame, scaledFrame, cv::Size(), scale, scale);
cv::aruco::detectMarkers(scaledFrame, dictionary, markerCorners, markerIds, parameters);
if (!markerIds.empty())
{
// Scale back the marker corners to the original frame size
for (auto& corners : markerCorners)
{
for (auto& corner : corners)
{
corner /= scale;
}
}
break;
}
}
}
// Draw detected markers
if (!markerIds.empty())
{