C# OpenCV 강좌 : 제 52강 - 템플릿 매칭
템플릿 매칭(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
이미지에 최소 지점
에서 템플릿 이미지 크기
로 설정하여 템플릿 매칭 결과를 표시합니다.
출력 결과
공유하기


댓글 남기기