2013-08-08 4 views
2

Мой вопрос связан с использованием 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); 
} 
+1

Немного кода, показывающего ваши попытки, возможно? –

ответ

1

уверен!

Rect roi(x,y,w,h); 
matchTemplate(img(roi), templ, result, method); 
Смежные вопросы