Bonjour,
Je poste ce message pour faire part de ma récente expérience avec cvFindContours. Peut être que quelqu'un qui connait mieux que moi opencv pourra donner une explication au problème que j'ai rencontré !
J'utilise opencv pour faire un logiciel de reconnaissance de caractère que je souhaite baser sur la comparaison des contours stockés sous la forme de chain code. Pour les obtenir, j'utilise la fonction cvFindContours avec la méthode CV_CHAIN_CODE sur des images 32*32 contenant les lettres de l'alphabet avec un cadre blanc autour (lignes blanches ((0,0)(0,31) ; (0,0)(31,0) ; (31,31)(0,31) ; (0,31)(31,31)) (voir l'image C.png attachée).
L'appel
cvFindContours(<c.bmp>, storage, &contour, sizeof(CvChain), CV_RETR_LIST, CV_CHAIN_CODE);
suivi de
cvDrawContours(<c_border.bmp>, contour, CV_RGB(128,128,128)/*gris*/,CV_RGB(0,0,0)/*noir*/,1,1,8);
donne l'image C_border.png. Comme vous pouvez le voir, cela ne correspond pas vraiment aux contours extérieurs de la lettre C puisque les lignes extérieures restent blanches.
J'ai trouvé une méthode pour éviter le problème, mettre 3 lignes blanches en haut, en bas, à gauche et à droite au lieu d'une (comme pour B => B_border en pj). Le résultat est correct mais bon...
Si quelqu'un pouvait m'expliquer le pourquoi du comment, j'apprécierais :-) !
Merci !
PS : pour mieux voir les images, faire clic droit > enregistrer sous puis ouvrir et zoomer pour voir les pixels.
Partager