2013-04-19 2 views
0

Я хочу посмотреть, есть ли шаблон, присутствующий в изображении с использованием openCv и C++. Однако из-за различного расстояния, на котором снимается изображение, и в другом положении изображения, совпадение происходит неправильно.Opencv C++ Template/Pattern Matching Scale и инвариант вращения

вот мой код:

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); 

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

+0

Возможно, «шаблон» является более подходящим термином, чем «шаблон» для вашего вопроса ... – Synxis

ответ

0

Пусть посмотрим на что:

SIFT Wiki

SIFT example

OpenCV SIFT documentation

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

+0

@ Alexandre Bizeau- Привет, ваш пример использует cv :: Mat и я не могу его использовать. Вот почему я спрашиваю, можно ли реализовать IplImage инвариантное вращение и масштабирование. – vidzz

+0

Вы не можете использовать, потому что вы делаете C? Или я чего-то не хватает? Позвольте мне взглянуть на IplImage, если есть способ сделать это и ваш код, в чем проблема. – Vuwox

+0

. PLZ: http: //stackoverflow.com/questions/16109471/load-image-with-opencv-mat-c. Я не могу загрузить изображение с помощью cv :: Mat, однако мне это удается. так что с IplImage – vidzz

 Смежные вопросы

  • Нет связанных вопросов^_^