상위 목록: 하위 목록: 작성 날짜: 읽는 데 10 분 소요

템플릿 매칭(Template Matching)

영상이나 이미지에서 템플릿과 일치하는 오브젝트를 검출하는 함수입니다.

원본(Source, src)은 영상이나 이미지를 사용합니다.



메인 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace Project
{
    class OpenCV : IDisposable
    {
        IplImage match;
        
        public IplImage Templit(IplImage src, IplImage temp)
        {
            match = src;
            IplImage templit = temp;
            IplImage tm = new IplImage(new CvSize(match.Size.Width - templit.Size.Width + 1, match.Size.Height - templit.Size.Height + 1), BitDepth.F32, 1);

            CvPoint minloc, maxloc;
            Double minval, maxval;

            Cv.MatchTemplate(match, templit, tm, MatchTemplateMethod.SqDiffNormed);

            Cv.MinMaxLoc(tm, out minval, out maxval, out minloc, out maxloc);

            Cv.DrawRect(match, new CvRect(minloc.X, minloc.Y, templit.Width, templit.Height), CvColor.Red, 3);

            return match;
        }
                  
        public void Dispose()
        {
            if (match != null) Cv.ReleaseImage(match);
        }
    }
}


세부 코드

match = src;
IplImage templit = temp;
IplImage tm = new IplImage(new CvSize(match.Size.Width - templit.Size.Width + 1, match.Size.Height - templit.Size.Height + 1), BitDepth.F32, 1);

매칭 이미지인 match와 템플릿 이미지인 templit을 생성합니다.

tm비교 결과로 사용합니다. 이미지 크기는 항상 W-w+1 x H-h+1로 고정적으로 사용됩니다.

  • Tip : (W, H) = match 이미지의 너비와 높이, (w, h) = templit 이미지의 너비와 높이


CvPoint minloc, maxloc;
Double minval, maxval;

minloc은 검출된 위치의 최소 지점을 의미합니다.

maxloc은 검출된 위치의 최대 지점을 의미합니다.

minval은 검출된 위치의 최소 포인터를 의미합니다.

maxval은 검출된 위치의 최대 포인터를 의미합니다.


Cv.MatchTemplate(match, templit, tm, MatchTemplateMethod.SqDiffNormed);

Cv.MatchTemplate()을 이용하여 템플릿 매칭을 실행합니다. Cv.MatchTemplate(매칭 이미지,템플릿 이미지 , 비교 결과 이미지, 연산방법)을 의미합니다.

  • MatchTemplateMethod.* : 연산방법입니다. R결과, T템플릿, I매칭 이미지를 의미합니다.
    • MatchTemplateMethod.SqDiff

    • MatchTemplateMethod.SqDiffNormed

    • MatchTemplateMethod.CCorr

    • MatchTemplateMethod.CCorrNormed

    • MatchTemplateMethod.CCoeff

    • MatchTemplateMethod.CCoeffNormed



Cv.MinMaxLoc(tm, out minval, out maxval, out minloc, out maxloc);

Cv.MinMaxLoc()를 이용하여 비교 결과이미지에서 포인터지점을 검출합니다.

Cv.MinMaxLoc(최소 포인터, 최대 포인터, 최소 지점, 최대 지점)를 의미합니다.

  • Tip : out 키워드를 포함해야합니다.


Cv.DrawRect(match, new CvRect(minloc.X, minloc.Y, templit.Width, templit.Height), CvColor.Red, 3);

match 이미지에 최소 지점에서 템플릿 이미지 크기로 설정하여 템플릿 매칭 결과를 표시합니다.



출력 결과

댓글 남기기