Je ne sais pas qui est votre objectif final amphetamachine dit, mais une approche assez commune pour détecter des formes pourrait être l'utilisation de cvFindContours qui, compte tenu une image binaire et renvoie un ensemble de 'CvContour' (qui est en fait un cvSeq). L'image binaire peut être récupérée assez simplement en seuillant l'image (cvThreshold). Consultez l'exemple contours.c dans l'exemple/du répertoire src opencv. Vérifiez ce lien ainsi:
Noah (2009) opencv tutorial
cet exemple de code vous donnera une idée générale:
cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY);
cvFindContours(g_gray, g_storage, &contours);
cvZero(g_gray);
if(contours){
cvDrawContours(
g_gray,
contours,
cvScalarAll(255),
cvScalarAll(255),
100);
}
cvShowImage("Contours", g_gray);
Une fois que vous avez un codage du contour, vous pouvez utiliser cvMatchShapes qui prennent 2 contours et retourner une mesure de similarité entre ces contours.
J'espère que cette approche vous donnera une longueur d'avance!
être invariant d'échelle/rotation? Est-ce pour un jeu ou faut-il prendre de vraies photos en compte? –
Peut-être que cette question obtiendrait plus de réponses si vous nous disiez quel est le but ultime de trouver la forme, car trouver la forme de quelque chose peut signifier beaucoup de choses différentes; la forme suit la fonction. – amphetamachine