Comment détecter et d'adapter un marqueur à l'aide d'OpenCV (Template Matching)

Je suis en utilisant une image qui est titulaire d'un marqueur dans un domaine spécifique. J'ai essayé de le faire en utilisant le Modèle d'appariement qui est la méthode définie dans opencv comme cvMatchTemplate.

Je suis l'aide d'une web cam pour les détecter, actuellement, le programme est de détecter le marqueur, car j'ai fourni le même marqueur de modèle.

Mais je ne peux pas trouver un moyen de vérifier si c'est le meilleur match ou juste un peu de correspondance. Parce que dans cvMatchTemplate ce n'est pas seulement la détection de la meilleure correspondance, il permet également de repérer les zones qui sont légèrement correspondant.

Quelqu'un peut-il m'en dire un moyen pour ce faire. Ou si il y a un autre moyen pour mon problème, s'il vous plaît laissez-moi savoir!

voici le lien de mon image de la carte
http://imageshack.us/photo/my-images/266/piggycard.jpg/
(Je veux détecter et de vérifier si son mached)

voici le code

//template_mching_test_2.cpp : Définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main()
{   
IplImage* imgOriginal = cvLoadImage("D:\Yr\\Research\\SRS\\Animations\\Piggycard.jpg", 0);
IplImage* imgTemplate = cvLoadImage("D:\Yr\\Research\\MakingOf\\Sample Imageas\\PiggyMarkerStart.jpg", 0);

CvCapture *cap = cvCaptureFromCAM(0);

if(!cap)
return -1;

cvNamedWindow("result");

IplImage* imgOriginal;
IplImage* imgOriginal2;
IplImage* imgResult;

while(true)
{
imgOriginal = cvQueryFrame(cap);//cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width+1, imgOriginal->height-imgTemplate->height+1), IPL_DEPTH_32F, 1);
imgOriginal2 = cvCreateImage(cvSize(imgOriginal->width,imgOriginal->height),imgOriginal->depth,1);
imgResult = cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width + 1,imgOriginal->height-imgTemplate->height+1),IPL_DEPTH_32F,1);

cvZero(imgResult);
cvZero(imgOriginal2);

cvCvtColor(imgOriginal,imgOriginal2,CV_BGR2GRAY);
cvMatchTemplate(imgOriginal2, imgTemplate, imgResult,CV_TM_CCORR_NORMED);

double min_val=0, max_val=0;
CvPoint min_loc, max_loc;
cvMinMaxLoc(imgResult, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(imgOriginal, max_loc, cvPoint(max_loc.x+imgTemplate->width,  max_loc.y+imgTemplate->height), cvScalar(0), 1);
printf("%f \n", max_val);

cvShowImage("result", imgOriginal);

cvWaitKey(10);

cvReleaseImage(&imgOriginal2);
cvReleaseImage(&imgResult);
}

cvDestroyAllWindows();
cvReleaseCapture(&cap);

return 0;

}

et que le modèle, je fournis le même marqueur qui recadrée de l'image d'origine. De minMaxLoc j'ai pris la valeur max pour vérifier la meilleure correspondance. mais il est de continuer à me donner les mêmes valeurs lorsque l'image marqueur dans une position, Et lorsque l'image marqueur n'est pas dans le cadre et légèrement correspondant à une place qui précédent appariés avec le marqueur.Ne minMaxloc de nous donner les coordonnées(position) du marqueur ou d'un pourcentage.Ou est-il un autre moyen pour cela.
Je vous remercie pour votre attention.

Pouvez-vous mettre un peu de code? Et peut-être quelques images que vous utilisez?
Qu'entendez-vous par le marqueur? Est-il particulier de couleur de l'objet? ou pouvez-vous faire? Ensuite, vous n'aurez pas besoin de modèle correspondant. juste à l'extraction de la couleur est suffisant. Si vous avez une capture d'écran, télécharger dans imageshack.nous, et fournir le lien ici.
voici le lien pour l'image imageshack.us/photo/my-images/266/piggycard.jpg effectivement, c'est une image de la carte. im faisant un outil éducatif pour les enfants.Il y a plus d'image, les cartes qui détient des marqueurs uniques. donc, à partir du marqueur im va pour identifier l'image de la carte(j'ai pensé à la détection d'un marqueur est plus facile que de les détecter l'ensemble de l'image ou de la carte de ce qui est Mieux? im nouveau pour cette). Merci pour votre considération.

OriginalL'auteur MUSTY | 2012-06-19