코드
#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 |