코드

#include <opencv2/opencv.hpp>

#include <opencv2/highgui.hpp>


using namespace cv;

using namespace std;


int x_ = 0;

int y_ = 0;


Mat tImage1; Mat tImage2; Mat tImage3; Mat tImage4;

Mat dstImage; Mat srcImage;



void find() {


double minVal, maxVal;

Point minLoc, maxLoc;

Mat result;


matchTemplate(srcImage, tImage1, result, TM_CCOEFF_NORMED);

minMaxLoc(result, NULL, &maxVal, NULL, &maxLoc);



if (maxLoc.x <= x_

&& maxLoc.y <= y_

&& maxLoc.x + tImage1.cols >= x_

&& maxLoc.y + tImage1.rows >= y_) {

printf("A \n");

}



matchTemplate(srcImage, tImage2, result, TM_CCOEFF_NORMED);

minMaxLoc(result, NULL, &maxVal, NULL, &maxLoc);


if (maxLoc.x <= x_

&& maxLoc.y <= y_

&& maxLoc.x + tImage1.cols >= x_

&& maxLoc.y + tImage1.rows >= y_) {

printf("S \n");

}



matchTemplate(srcImage, tImage3, result, TM_CCOEFF_NORMED);

minMaxLoc(result, NULL, &maxVal, NULL, &maxLoc);


if (maxLoc.x <= x_

&& maxLoc.y <= y_

&& maxLoc.x + tImage1.cols >= x_

&& maxLoc.y + tImage1.rows >= y_) {

printf("b \n");

}



matchTemplate(srcImage, tImage4, result, TM_CCOEFF_NORMED);

minMaxLoc(result, NULL, &maxVal, NULL, &maxLoc);


if (maxLoc.x <= x_

&& maxLoc.y <= y_

&& maxLoc.x + tImage1.cols >= x_

&& maxLoc.y + tImage1.rows >= y_) {

printf("m \n");

}


}


static void mouse_callback(int event, int x, int y, int, void* param) {


if (event == EVENT_LBUTTONDOWN) {

x_ = x;

y_ = y;

find();

}

}



int main()

{

srcImage = imread("image4/alphabet.bmp", CV_LOAD_IMAGE_GRAYSCALE);

if (srcImage.empty())

return -1;


tImage1 = imread("image4/A.bmp", CV_LOAD_IMAGE_GRAYSCALE);

tImage2 = imread("image4/S.bmp", CV_LOAD_IMAGE_GRAYSCALE);

tImage3 = imread("image4/b.bmp", CV_LOAD_IMAGE_GRAYSCALE);

tImage4 = imread("image4/m.bmp", CV_LOAD_IMAGE_GRAYSCALE);


cvtColor(srcImage, dstImage, COLOR_GRAY2BGR);


imshow("dstImage", dstImage);

setMouseCallback("dstImage", mouse_callback);


waitKey();

return 0;

}


코드해석

인식할 문자(A,S,b,m)와 전체 영상(alphabet)을 load하여 마우스 콜백이 일어나면 템플릿 매칭을 시킨다.

인식한 영상의 MinLoc과 MaxLoc을 알아와서 영역을 설정해준다.

그리고 마우스 좌표가 해당영역안이면 콘솔에 문자를 입력한다.



마우스의 영역을 찾는것이 이 문제의 해결 방법인것 같다.


결과화면


'Programming > openCV' 카테고리의 다른 글

polygon Detection  (0) 2017.05.03
open cv 요약  (0) 2017.04.18
BGR별 히스토그램 구하기  (0) 2017.04.11
vector에 접근하는 두가지 방법  (0) 2017.04.11
13. Hough Circles  (0) 2017.04.04

+ Recent posts