Здравствуйте!
такой вопрос: создал прилагу по поиску фрагмента на картинке по шаблону
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
31
32
33
34
35
36
37
38
39
40
41
#define CV_TM_SQDIFF 0
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\opencv.hpp>
#include<opencv\cv.h>
#include<stdio.h>
using namespace cv;
using namespace std;
double minval, maxval;
int main(int argc, const char** argv)
{
setlocale(LC_ALL, "Russian");
string ishod_im = "TEST.jpg";
char ish_is[100];
strcpy(ish_is, ishod_im.c_str());
IplImage* image = 0;
image = cvLoadImage(ish_is, 1);
string shablon_im = "X.jpg";
char ish_sh[100];
strcpy(ish_sh, shablon_im.c_str());
IplImage* templ = 0;
templ = cvLoadImage(ish_sh, 1);
int width = templ->width;
int height = templ->height;
IplImage *res = cvCreateImage(cvSize((image->width - templ->width + 1), (image->height - templ->height + 1)), IPL_DEPTH_32F, 1);
cvMatchTemplate(image, templ, res, CV_TM_SQDIFF);
CvPoint minloc, maxloc;
cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0);
cvRectangle(image, cvPoint(minloc.x, minloc.y), cvPoint(minloc.x + templ->width - 1, minloc.y + templ->height - 1), CV_RGB(0, 0, 255), 2, 8);
cvShowImage("Совпадения", image);
waitKey(0);
return 0;
}
С большего все работает норм, интересует два вопроса:
1. как сделать так чтобы находило более одного совпадения? (вроде как есть какой-то способ "скользящего окна", но хотелось бы знать как его реализовать. а может и не им надо пользоваться)
2. как сделать чтобы в случае отсутствия совпадения не показывал ни одной рамки (сейчас прога ищет совпадения, но даже если адекватных нет выдает хоть какой-то результат (неверный))