Мой вопрос связан с использованием matchTemplate
в OpenCV. Я могу использовать эту функцию, чтобы найти шаблон во всем изображении. Можно ограничить «область поиска» до ограниченной области внутри изображения, то есть с помощью roi? Я попытался установить roi перед вызовом matchTemplate
, но это не повлияло.OpenCV MatchTemplate, ограниченный roi
Итак, вы знаете какой-либо способ ограничить поиск шаблона до субрегиона изображения? Это потому, что я знаю, что моя цель может быть найдена только в этом ограниченном регионе.
Вот некоторые строки кода взяты непосредственно из образцов OpenCV:
void MatchingMethod(int, void*)
{
// Source image to display
Mat img_display;
img.copyTo(img_display);
// Create the result matrix
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create(result_cols, result_rows, CV_32FC1);
// Do the Matching and Normalize
img.adjustROI(100, 100, 500, 500);
matchTemplate(img, templ, result, match_method);
normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
// Localizing the best match with minMaxLoc
double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
if(match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED)
{ matchLoc = minLoc; }
else
{ matchLoc = maxLoc; }
// Show me what you got
rectangle(img_display, matchLoc, Point(matchLoc.x + templ.cols , matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);
rectangle(result, matchLoc, Point(matchLoc.x + templ.cols , matchLoc.y + templ.rows), Scalar::all(0), 2, 8, 0);
imshow(image_window, img_display);
imshow(result_window, result);
}
Немного кода, показывающего ваши попытки, возможно? –