Opencv c ++ Шаблон / Масштаб соответствия шаблонов и инвариант вращения

Я хочу видеть, присутствует ли шаблон в изображении, используя openCv и c ++. Однако из-за разного расстояния, на котором снимается изображение, и разного положения изображения, совпадение происходит неправильно.

вот мой код:

IplImage* image    = cvLoadImage("C:/images/Photo0734.jpg", 1);
IplImage* templat  = cvLoadImage("C:/images/templatecoin.jpg", 1);
int percent =25;// declare a destination IplImage object with correct size,
depth and  channels
IplImage* image3 = cvCreateImage( cvSize((int)((image->width*percent)/100) ,
(int)((image->height*percent)/100) ),image->depth, image->nChannels );

//use cvResize to resize source to a destination image
cvResize(image, image3);
IplImage* image2   = cvCreateImage(cvSize(image3->width, image3->height),
IPL_DEPTH_8U,   1);
IplImage* templat2 = cvCreateImage(cvSize(templat->width,
templat->height),   IPL_DEPTH_8U, 1);

cvCvtColor(image3, image2, CV_BGR2GRAY);
cvCvtColor(templat, templat2, CV_BGR2GRAY);int w = image3->width - templat->width + 1;
int h = image3->height - templat->height + 1;
result = cvCreateImage(cvSize(w, h), IPL_DEPTH_32F, 1);
cvMatchTemplate(image2, templat2, result, CV_TM_CCORR_NORMED);

double min_val, max_val;
CvPoint min_loc, max_loc;
cvMinMaxLoc(result, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(image3, max_loc, cvPoint(max_loc.x+templat->width,
max_loc.y+templat->height), cvScalar(0,1,1), 1);

cvShowImage("src", image3);
//cvShowImage("result image", result);
cvWaitKey(0);

Обратите внимание, что я не могу использовать «Мат». Можно ли использовать IplImage * и включить код, инвариантный к масштабированию и повороту? Помоги мне.

1

Решение

Давайте посмотрим на это:

SIFT Wiki

Пример SIFT

Документация OpenCV SIFT

Я думаю, что это может быть полезно для вас.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]