Соответствие шаблону openCV с использованием CV_TM_CCORR_NORMED

У меня есть этот код

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);

Спасибо.

2

Решение

Вам нужно выполнить оба 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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]