일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- c언어
- #프로젝트
- object detection
- python __init__
- #Android
- #English
- text2img
- 이미지 생성
- #일상영어
- findContours
- keras
- tokenizing
- tensorflow update
- 딥러닝
- python 알고리즘
- TensorFlow
- #실생활영어
- 완전탐색
- #opencv
- convexhull
- 영어명언
- #실생활 영어
- python list
- 영어
- word embedding
- #영어
- #1일1영어
- #영어 명언
- Convolution Neural Network
- opencv SURF
- Today
- Total
When will you grow up?
12. Image Template matching[템플릿 매칭] 본문
12. Image Template matching[템플릿 매칭]
미카이 2016. 10. 13. 17:57Template matching?
도형 인식 과정에 의해서 주언 도형(템플릿과 일치하는 도형)을 화상에서 추출하는 조작.
-출처 : http://terms.naver.com/entry.nhn?docId=1597785&cid=50376&categoryId=50376
말그대로 이미지가 같은 이미지인지 판단을 하는 것입니다.
주어진 작은 이미지가 존재하는지 찾아볼때 주로 사용됨니다.
작업과정
두 가지 주요 구성 요소가 필요합니다.
원본이미지 ,템플릿 이미지(비교 될 패치 화상)
일치하는 영역을 식벽하기 위해서 우리는 원본 이미지에 템플릿 이미지를 비교 합니다.
코드설명 입니다.
//전역 변수로 원본이미지 매칭할 템플이미지 결과 이미지 및
변수로 이미지매칭 시킬 함수 선언
//이미지 로드
//결과 값을 보여줄 window창을 만든다
namedWindow( image_window, WINDOW_AUTOSIZE );
namedWindow( result_window, WINDOW_AUTOSIZE );
//Trackbar생성은 matching 함수에 이용된다.검출 한 경우는 MatchingMethod라고 불림
//템플릿 매칭 작업
matchTemplate( img, templ, result, match_method );//원본이미지,템플릿이미지 , //결과,match_method (트랙바))
//결과값 정규화
normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );
//CV : minMaxLoc 를 이용하여 R의 최소값 및 최대값 구하기
//원본 이미지와 결과 이미지 디스플레이 및 가장 높은 매칭 영역 주위에 사각형 생성
//원본이미지
//템플릿 이미지
결과
전체 소스 코드입니다.
#include "ofApp.h" Mat img; Mat templ; Mat result; const char* image_window = "Source Image"; const char* result_window = "Result window"; int match_method; int max_Trackbar = 5; void MatchingMethod(int, void*); //-------------------------------------------------------------- void ofApp::setup() { img = imread("223.JPG"); templ = imread("111.JPG"); namedWindow(image_window, WINDOW_AUTOSIZE); namedWindow(result_window, WINDOW_AUTOSIZE); const char* trackbar_label = "Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED"; createTrackbar(trackbar_label, image_window, &match_method, max_Trackbar, MatchingMethod); MatchingMethod(0, 0); waitKey(0); } void MatchingMethod(int, void*) { 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, match_method); normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat()); double minVal; double maxVal; Point minLoc; Point maxLoc; Point matchLoc; minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat()); if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED) { matchLoc = minLoc; } else { matchLoc = maxLoc; } 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); return; } //-------------------------------------------------------------- void ofApp::update() { } //-------------------------------------------------------------- void ofApp::draw() { }
출처 : http://docs.opencv.org/3.1.0/de/da9/tutorial_template_matching.html
'02. Study > Computer Vision(openframworks&opencv)' 카테고리의 다른 글
13.형태학 연산으로 영상변환(morphology ->erosion(침식) dilation(팽창)) (0) | 2016.10.22 |
---|---|
11.medianblur 만들기 (0) | 2016.10.16 |
10.bilateralFilter를 이용한 이미지 처리. (0) | 2016.09.29 |
GaussianBlur 를 이용한 이미지 필터링 (0) | 2016.09.24 |
9.Image Histogram만들기 & GaussianBlur를 적용시킨 Histogram (0) | 2016.09.23 |