bonjour
je cherche à appliquer le filtre Sobel sur une image et j'ai utilisé la fonction d'OpenCV "Cvsobel" mais qu'on j’exécute mon programme il se plante
please aider moi
bonjour
je cherche à appliquer le filtre Sobel sur une image et j'ai utilisé la fonction d'OpenCV "Cvsobel" mais qu'on j’exécute mon programme il se plante
please aider moi
Bonjour,
Sans rien il est trés difficile de pouvoir répondre, montre nous ton code ou une partie. On pourra par la suite voir ce qu'il ne va pas![]()
voila le code qu j'ai fait
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 #include "cv.h" #include "highgui.h" int main() { IplImage* img0; IplImage* img1; IplImage* sobel=cvCreateImage(cvGetSize(img0),img0->depth,1); /* load image */ img0=cvLoadImage("im1.jpg"); /*On vérifie l'origine de l'image chargée et si elle n'est pas en haut à gauche, il faut la corriger*/ int flip=0; if(img0->origin!=IPL_ORIGIN_TL) { flip=CV_CVTIMG_FLIP; } img1=cvCreateImage(cvGetSize(img0),img0->depth,1); cvCvtColor(img0,img1,CV_BGR2GRAY); cvSobel(img1,sobel,3,3,3); cvNamedWindow("img", 1); cvNamedWindow("img1", 1); cvShowImage("img", img0); cvShowImage("img",sobel); cvWaitKey(0); /* be tidy */ cvDestroyAllWindows(); cvReleaseImage(&img0); cvReleaseImage(&sobel); return 0; }
Bonjour !
Le filtre de Sobel d'OpenCV nécessite une image avec une profondeur supérieure à l'image d'origine. Tout simplement car le produit de convolution appliqué donne des résultats qui vont outrepasser les limites de l'images d'origine (par multiplication ..).
En général, les images utilisées ont une profondeur de 8 bits et donc, pour votre image Sobel, si vous utilisez une profondeur de 32 bits cela ne devrait plus poser de problème.
Cependant, si vous voulez conserver une image de Sobel sur 8 bits (personnellement je trouve que cela donne un meilleur rendu pour les contours) alors vous devrez appliquer le filtre de convolution par vous même (en utilisant la fonction cvFilter2D).
Autre chose, dans la fonction que vous implémentez (cvSobel()), les paramètres de dérivation suivant X et Y que vous avez entrés risquent de ne donner aucun résultat ..
Utilisez plutôt les valeurs de ``0,1'' ou ``1,0'' (valeurs utilisant la matrice ``standard'' de Sobel).
ok merci pour ces informations maintenant mon problème est résolu
ok merci pour ces informations maintenant mon problème est résolu
Partager