Сравнение контуров OpenCV

у меня возникла проблема с сравнением контуров на изображениях разного размера с использованием библиотеки OpenCV в C++. Я понимаю, что размер изображений может влиять на точность сравнения контуров, и мне нужна помощь в определении оптимального способа решения этой проблемы. Пока что, я пробовал сравнивать с помощью matchShapes, но он сравнивает только два контура, и как-то странно(может мне показалось). Вот изображения которые я сравниваю(у них просто разные размеры).

Пожалуйста, поделитесь своим опытом. Может быть, есть особые методы или подходы, которые я упустил?

Код

cv::Mat templImage = cv::imread("Caught.png", IMREAD_GRAYSCALE);
cv::Mat templImageRes = cv::imread("Caught2.png", IMREAD_GRAYSCALE);

vector<vector<Point> > templContours;
vector<Vec4i> hierarchy;

threshold(templImage, templImage, 127, 255, THRESH_TOZERO);
findContours(templImage, templContours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

Mat drawing = Mat::zeros(templImage.size(), CV_8UC3);
drawContours(drawing, templContours, -1, Scalar(255, 255, 255));

imshow("result", drawing);
waitKey(0);

vector<vector<Point> > templContoursTwo;
vector<Vec4i> hierarchyTwo;

threshold(templImageRes, templImageRes, 127, 255, THRESH_TOZERO);
findContours(templImageRes, templContoursTwo, hierarchyTwo, RETR_TREE, CHAIN_APPROX_SIMPLE);

Mat drawingTwo = Mat::zeros(templImageRes.size(), CV_8UC3);
drawContours(drawingTwo, templContoursTwo, -1, Scalar(255, 255, 255));

imshow("result", drawingTwo);
waitKey(0);
std::cout << "Contours size: " << templContours.size() << " and " << templContoursTwo.size() << std::endl;

double matchResult = matchShapes(findedContours[0], findedContoursTwo[0], 1, 0.0);


cout << "Value " << matchResult << endl;

Ответы (0 шт):