si j'ai essayé mais la meme erreur lors de l'execution !
si j'ai essayé mais la meme erreur lors de l'execution !
ce qui donne un code tout à fait correct de visu (attention dans le if je n'ai pas vérifié)
et on en profite pour rajouter ca
histoire de savoir ou se trouve reellement l'origine de l'image, on rajoute ca au tout début
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //On vérifie l'origine de l'image //Si elle n'est pas en haut à gauche, il faut la corriger int flip=0; if(img->origin!=IPL_ORIGIN_TL) { flip=CV_CVTIMG_FLIP; }
edit: autant pour moi je voyais pas le balayage de la même facon ca devrait fonctionner.
je dirais même qu'il vaut mieux balayer suivant x et s'arreter plutot que de continuer à balayer c'est plus optimisé.
et avec ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if( (pixel.val[0] == 255) && (pixel.val[1] == 255) && (pixel.val[2] == 255)) { if( j < minX)minX=j; if( i < minY)minY=i; if( j > maxX)maxX=j; if( i > maxY)maxY=i; } else { minX=0; minY=0; maxX=monImage->width; maxY=monImage->height }
y'a une erreur dans vos codes corrigé ici en rouge.
Exact , bien vu, ca c'est les desagrements du copier coller. Mais le code que tu as mis ne peux pas marcher, il faut enlever ce else, car sinon tu perds toutes les informations accumulees au cours de l'iteration. Et tester toutes les composantes est pas vraiment utile s'il y a que du noir et du blanc mais c'est peut-etre pas une mauvaise habitude a prendre.
Bonjour,
svp maintenant je veux calculer le nombre de pixels compris entre un contour de canny et une droite que jai tracée merci davance pour votre aide .
Soit plus precis je comprends pas du tout ce que tu essayes de faire, le nombre de pixels de la surface entre les deux? du plus court chemin? De toute facon pour tous c'est la meme techniques une boucle qui parcours tous tes pixels et qui incremente un compteur a chaque fois que le pixel est entre ta droite et ton contour( meme si je sais pas trop ce que ca veut dire...)
Bonjour,
j'ai une image binaire , sur laquelle j'ai effectué le contour de canny, après j'ai dessiné une droite qui passe du milieu de mon contour et je veux calcuer le nombre de pixels blanc qui se situe dans l'intervalle entre le contour de canny et ma droite,
Je suis desole mais il va falloir que tu t'explique mieux si tu veux que je comprenne.Ca veut dire que dans l'image que tu traites il reste plus que des contours? De quelle couleur( noir ou blanc)?j' une image binaire , sur laquelle j'ai effectué le contour de canny
De quelle couleur la droite? Explique mieux ce que tu veux dire par milieu: le centre? de quelle forme est ton contour?après g dessiné une droite qui passe du milieu de mon contour
Si comprends bien alors les contours sont en noir et le reste en blanc. Mais il va falloir que tu precise ce que je t'ai demande au-dessus sinon je vois vraiment pas ce que tu veux faire.je veux calcuer le nombre de pixels blanc qui se situe dans l'intervalle entre le contour de canny et ma droite
tout d'abord attention à ta facon d'écrire relie toi, si tu zappe des mots ou que tu écris pas francais on risque de pas comprendre.
hum je dirais (au depart son contour c'est un carré je crois) qu'elle a sont contour et qu'elle l'a coupé en deux et qu'elle veut le nombre de pixel se situant dans un des deux bout c'est ca ?
oui tas raison
sur mon image il y a que les contours qui sont en blanc, et puis jai dessiné une droite blanche aussi, cette droite divise mon mon image en 2 partie, une partie en dessous du contour et en dessus de la droite, et une partie en dessous de la droite et en dessus du contour, et je veux calculer le nombre de pixels blans ki se trouvent dans chacune de ces parties.
mais mon contour n as pas une forme précise, il est aleatoire.
hum avec le min x,y et max x,y ca se fait tout dessuite ta la position de la droite (elle est horizontale verticale oblique ?) ?
le contour tracé est un rectangle donc ce n'est pas un souci. Sinon ben on va balayer toute l'image en comptant les pixels blanc
tu veux le nombre précis de pixel dans ta zone ?
ma droite est oblique, elle passe par 2 points que jai definis
tu veux le nombre précis de pixel ou une approximation ?
a vrai dire je veux que ça soit precis
Si tu postais un exemple d'image je suis sur qu'on pourrait t'aider beaucoup plus facilement.
Juste une question sinon: tu utilise cvLine pour tracer la droite?
comme l'a dit glen poste ton image et le code que tu as pour la droite.
oui jai utilisé cvLine et j'ai défini 2 points par lesquelles ma droite va passer.
( j'ai voulu poster une image mais ça marche pas :s, l'image ne s'affiche pas)
poste ton code stp
voilà le code: mais
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 #include <cv.h> #include <highgui.h> int main() { IplImage *img, *img_gris, *img_bin, *img_canny; img=cvLoadImage("img.jpg"); cvNamedWindow("image", CV_WINDOW_AUTOSIZE); cvShowImage("image", img); img_gris=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1); img_bin=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1); img_canny=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1); cvCvtColor(img,img_gris,CV_RGB2GRAY); int seuil=110; cvThreshold(img_gris, img_bin, seuil, 255, CV_THRESH_BINARY); IplConvKernel *noyau; noyau=cvCreateStructuringElementEx(3,3,2,2,CV_SHAPE_RECT); cvErode(img_bin,img_bin,noyau,1); cvDilate(img_bin,img_bin,noyau,1); cvCanny(img_bin, img_canny, 100, 200); cvLine(img_canny, cvPoint(0, img->height-15), cvPoint(img->width, 35), cvScalar (255), 1); cvLine(img_canny, cvPoint(0, img->height), cvPoint(img->width,img->height-25), cvScalar(255),1 ); cvNamedWindow("image grise", CV_WINDOW_AUTOSIZE); cvNamedWindow("image binaire", CV_WINDOW_AUTOSIZE); cvNamedWindow("image canny", CV_WINDOW_AUTOSIZE); cvShowImage("image grise", img_gris); cvShowImage("image binaire", img_bin); cvShowImage("image canny", img_canny); cvWaitKey(0); return 0; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager