Bonjour,
J'ai une image sur laquelle je désire détecter des contours d'une taille connu.
Je binarise mon image et ensuite j'utilise la fontion cvFindContours pour trouver les contours dans mon image. Ceci marche très bien, mais je souhaiterai éliminer certain contours en ne les dessinant pas, en gros ceux dont la taille ne me convient pas.
Voici mon code:
Cette boucle marche très bien quand je laisse le else dans lequel je dessine les contours non désiré en noir. Mais lorsque j'élimine ce else il m'affiche des coutours qui ne devrai pas s'afficher et qui plus est dans la meme couleur que ceux qui doivent être conservé.(voir image ci dessous). Le problème est qu'en dessinant en noir mes contours non désiré je perd énormément de temps à l'exécution et j'ai besoin d'être le plus rapide possible pour des contraintes de temps pour la suite du programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 // determine les contours des blobs nb_contours=cvFindContours ( img, mem, &contour, sizeof( CvContour ), CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE); for(;contour!=0;contour=contour->h_next) { //Si la taille du contour est bonne je la conserve et l'affiche if((fabs(cvContourArea(contour, CV_WHOLE_SEQ ))>400)&&(fabs(cvContourArea(contour, CV_WHOLE_SEQ ))<2200)) { color=CV_RGB(rand()&255,rand()&255,rand()&255); cvDrawContours( RegionConnexe, contour, color, color,1,CV_FILLED,8); } else { // color=CV_RGB(0,0,0); // cvDrawContours( RegionConnexe, contour, color, color,1,CV_FILLED,8); } }
Image souhaité:
Image obtenu:
Merci d'avance.
Partager