Основная проблема заключается в том, что значок часто меняет свой масштаб. В результате методы, которые я пытался использовать для поиска, терялись или лишь изредка давали нормальный результат.
Для начала я пробовал использовать сопоставление шаблонов, но это не помогло. Не будет хорошо, если значок будет другого размера. Еще я пробовал сделать массив из нескольких размеров, но это работало очень нестабильно и сильно тормозило алгоритм.
Код: Выделить всё
std::vector fishIcon;
const std::vector SCALES = { 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.4 };
//Going through all the scales until you find the right one
for (Mat ic : fishIcon) {
if (FindObject(ic, screenshotGray, max_loc, result, true, 0.8)) {
fishIconPosition = Point(max_loc.x, max_loc.y);
found = true;
break;
}
}
//Code for creating multiple masterstabs
for (double scale : SCALES) {
Mat resIcon;
resize(sourceIcon, resIcon, Size(0, 0), scale, scale);
fishIcon.push_back(resIcon);
}
//A method for searching for an icon in an image
bool botActions::FindObject(Mat& templateForFind, Mat& screenshot, Point& maxLoc, Mat& result, bool debug, double confid) {
matchTemplate(screenshot, templateForFind, result, TM_CCOEFF_NORMED);
double minVal, maxVal;
minMaxLoc(result, &minVal, &maxVal, NULL, &maxLoc);
if (debug) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78249294/search-for-an-icon-on-an-image-opencv[/url]