У меня есть шаблон, и я хочу знать, присутствует ли шаблон в изображении. Ну, я много гугл и пришел к выводу, что мне нужно использовать cvMatchTemplate
и cvMinMaxLoc
.OpenCV C++ распознавание шаблона
Вот мой код:
image = cvLoadImage("C:/images/flower.jpg",1);
templat = cvLoadImage("C:/images/flo.jpg",1);
image2=cvCreateImage(cvSize(image->width, image->height), IPL_DEPTH_8U, 1);
result=cvCreateImage(cvSize(image->width, image->height), IPL_DEPTH_8U, 1);
cvZero(result);
cvZero(image2);
cvCvtColor(image,image2,CV_BGR2GRAY);
cvMatchTemplate(image2, templat,result,CV_TM_CCORR_NORMED);
double min_val=0, max_val=0;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);
cvRectangle(image, max_loc, cvPoint(max_loc.x+templat->width,
max_loc.y+templat->height), cvScalar(0), 1);
cvShowImage("src", image);
cvShowImage("result image", result);
cvWaitKey(0);
Моя проблема, когда я запускаю код выше, окно сообщения отображается говоря:
Unhandled exception at 0x747d812f in matching.exe: Microsoft C++ exception: cv::Exception at memory location 0x001ff6ec..
и в черном экране появляется сообщение:
OpenCV Error: Sizes of input arguments do not match <image and template should have the same type> in unknown function, file..\..\..\..\ocv\opencv\scr\cv\cvtempl.cpp, line 356.
Пожалуйста, обратите внимание, что flower.jpg
является цветным изображением и flo.jpg
является серой шкалой этого изображения.
Любые идеи о том, что происходит?
Как вы объявляете 'image' и' templat'? Каковы их типы? –
IplImage * templat = NULL; IplImage * image = NULL; – vidzz