상세 컨텐츠

본문 제목

템플릿 매칭 Template Matching - OpenCV

영상처리/OpenCV

by cepiloth 2021. 2. 14. 19:15

본문

728x90
반응형

 

템플릿 매칭 Template Matching

템플릿 매칭은 원본 이미지에서 템플릿 이미지와 일치하는 영역을 찾는 알고리즘입니다. 원본 이미지 위에 템플릿 이미지를 놓고 조금씩 이동해가며 이미지 끝에 도달할 때 까지 비교해 찾아갑니다. 이 방식을 통해, 템플릿 이미지와 동일하거나, 가장 유사한 영역을 원본 이미지에서 검출합니다.

OpenCV 함수를 이용하여 템플릿 매칭 을 하는 간단한 코드를 작성 합니다.

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>

#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace cv;

class cvTimerCustom {

public:
    cvTimerCustom(string name) {
        this->name = name;
        tm.start();
    }

    ~cvTimerCustom() {
        tm.stop();
        double average_time = tm.getTimeSec() / tm.getCounter();
        std::cout << name << " - " << "Average time in second per iteration is: " << average_time << std::endl;
    }

private:
    string name;
    TickMeter tm;
};

#define CV_STOPWATCH(arg) cvTimerCustom(arg)

int main()
{
    Mat img, templ, result;
    double minVal, maxVal; 
    Point minLoc, maxLoc, matchLoc;

    img = imread( "source.jpg", 1 );
    templ = imread( "pat.jpg", 1 );

    Mat img_display;
    img.copyTo( img_display );

    int result_cols =  img.cols - templ.cols + 1;
    int result_rows = img.rows - templ.rows + 1;
    result.create( result_rows, result_cols, CV_32FC1 );

    matchTemplate( img, templ, result, TM_CCOEFF_NORMED );
    normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );

    minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );

    matchLoc = maxLoc;
    rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), 0xff00ff, 2, 8, 0 );

    imshow( "source", img_display );
    imshow( "match", templ );

    waitKey(0);
    return 0;

    return 0;
}

 

 

728x90
반응형

'영상처리 > OpenCV' 카테고리의 다른 글

타이머 사용하기 TickMeter class - OpenCV  (0) 2021.02.14
비사실적 렌더링 Non-Photorealistic Rendering - OpenCV  (0) 2021.02.14
OpenCV로 이미지 출력 하기  (0) 2021.02.14
AVI 출력 하기  (0) 2021.02.14
CMYK 가산 혼합  (0) 2021.02.14

관련글 더보기

댓글 영역