У меня есть этот код
cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);
Как заставить программу выполнить следующие строки, если есть совпадение:
double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);
cvRectangle(image3, max_loc, cvPoint(max_loc.x+templat->width,
max_loc.y+templat->height), cvScalar(0,1,1), 1);
Спасибо.
Вам нужно выполнить оба cvMatchTemplate и cvMinMaxLoc вместе:
cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);
double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);
Затем вы можете определить, есть ли у вас совпадение, проверив max_val.
если max_val равен 1, у вас есть точное совпадение, пиксель за пикселем, в позиции max_loc в вашем поисковом изображении. Чем меньше max_val, тем больше ошибок в лучшем совпадении.
Попробуйте это для некоторых тестовых случаев, чтобы определить, каким должен быть ваш порог.
Имейте в виду, что если вы используете CV_TM_SQDIFF_NORMED вместо CV_TM_CCORR_NORMED, идеальное совпадение соответствует значению ноль вместо одного, поэтому вам придется проверять min_val вместо max_val
Других решений пока нет …