IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Traitement d'image


Sujet :

OpenCV

  1. #1
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut Traitement d'image
    Bonjour,

    je souahite charger une image dans une variable pour ensuite pouvoir effectuer un traitement, mon objectif est de rendre tout ce qui est gris en blanc donc j'ai choisie une image simple (en premier temps) pour m'adapter avec openCv vue que c'est la premiere fois que je l'utilise le programme que j'ai developper est come suit :

    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
    #include <cv.h>
    #include <highgui.h>
    #include <conio.h>
    #include <iostream>
    int i,j;
    void main()
    {
    IplImage *img;
    img = cvLoadImage("Obs.jpg");
    cvShowImage("Photo prise camera", img);
    for (i=0;(*img).width-1;i++)
    	for (j=0;(*img).height-1;j++)
    	{
    		CvScalar pixel;
    		pixel=cvGet2D(img,i,j);
    		if ((pixel.val[0]>=150)&&(pixel.val[1]>=150)&&(pixel.val[2]>=150))
    		{
    			pixel.val[0]=255;
    			pixel.val[1]=255;
    			pixel.val[2]=255;
    			cvSet2D(img,i,j,pixel);
    		}
    	}
    cvShowImage("Photo traiter", img);
    cvWaitKey(0);
    cvDestroyWindow("Photo");
    cvReleaseImage(&img);
    }
    Problème :

    A l'execution du programme sa m'affiche une erreur s'affiche on me disant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception non gérée à 0x77444b32 dans OpenCV.exe : Exception Microsoft C++ : cv::Exception à l'emplacement mémoire 0x0110f6b8..
    un autre message afficher dans la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenCV error : one of arguments 'values is out of range (index is out of range) in unknown function, file .\src\array.cpp, line 1795
    je ne comprend pas pourquoi j'ai out of range.

    PS : le programme fonctionne correctement sans les boucle for (pour une iteration).

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (i=0;(*img).width-1;i++)
    	for (j=0;(*img).height-1;j++)
    Signifie "fais cette boucle tant que img.width-1 est différent de 0, ce qui signifie en d'autres termes "fais le tout le temps". Forcément, ton index i passe à une valeur "out of range".
    Même problème pour "j".

    Le code correct est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (i=0;i<(*img).width;i++)
    	for (j=0;j<(*img).height;j++)

  3. #3
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Bonjour,

    c'est une erreur vraiment bete mais apres avoir corrigé j'ai toujours les meme messages d'erreur

    et finalement je me suis tromper sur la longueur et la largeur donc j'ai inversé et paf sa marche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (i=0;i<(*img).height-1;i++)
    	for (j=0;j<(*img).width-1;j++)
    	{
    		CvScalar pixel;
    		pixel=cvGet2D(img,i,j);
    		if ((pixel.val[0]>=150)&&(pixel.val[1]>=150)&&(pixel.val[2]>=150))
    		{
    			pixel.val[0]=255;
    			pixel.val[1]=255;
    			pixel.val[2]=255;
    			cvSet2D(img,i,j,pixel);
    		}
    	}

  4. #4
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Maintenant je souhaite rendre une couleur (bleu) en rouge pour chaque pixel qui sera au voisinage de la couleur Rouge, et là !! je rencontre un autre probleme et sa me fruste vraiment, parce que j'ai deja tester mon algorithme sur matlab et sa fonctionne tres bien. le programme que j'ai mis en C est le suivant :

    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
    #include <cv.h>
    #include <highgui.h>
    #include <conio.h>
    #include <iostream>
    int i,j;
    void main()
    {
    IplImage *img;
    img = cvLoadImage("Obs.jpg");
    cvShowImage("Photo prise camera", img);
    printf("width = %d et height = %d",(*img).width,(*img).height);
    CvScalar pixel,pixel2;
    for (i=0;i<(*img).height-1;i++)
    {
    	for (j=0;j<(*img).width-1;j++)
    	{
    		pixel=cvGet2D(img,i,j);
    		//Effacer le bleu
    		if ((pixel.val[0]==255)&&(pixel.val[1]==0)&&(pixel.val[2]==0))
    			if (i>0)
    				{pixel2=cvGet2D(img,i-1,j);//pixel qui se trouve au dessus du pixel selectioner
    				if ((pixel2.val[0]=0)&&(pixel2.val[1]=0)&&(pixel2.val[2]=255))
    					{pixel.val[0]=0;pixel.val[1]=0;pixel.val[2]=255;cvSet2D(img,i,j,pixel);}
    				//cvSet2D(img2,i-1,j,pixel2); j'ai des doute ici je croix que je doit liberer le pixel pour qu'il puisse restocker a nouveau
    				}
    	}
    }
    cvShowImage("Photo traiter", img);
    cvWaitKey(0);
    cvDestroyWindow("Photo");
    cvReleaseImage(&img);
    }
    Li'dée de l'algorithme est basé sur le test du pixel qui se trouve au dessus du pixel selectioner sachant que celui-ci est de couleur bleu et celui du dessus est de rouge. Je pense qu'il faut liberer le pixel2 pour qu'il puisse restocker un autre pixel et je ne sais pas comment mis apartr d'utiliser la command cvSet2D

    merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Opérateur double '==' pour comparer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((pixel2.val[0]==0)&&(pixel2.val[1]==0)&&(pixel2.val[2]==255))
    À voir l'inclusion #include <iostream> tu sembles programmer en C++ et non en C, or tu utilises l'interface C d'OpenCV

    Question de goût, je préfère l'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i=0;i<img->width;i++)
    	for (j=0;j<img->height;j++)

  6. #6
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Bonsoir, et merci pour la correction de plus ton goût me plait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  2. Réponses: 5
    Dernier message: 15/01/2005, 18h29
  3. commande c++ pour le traitement d'images
    Par mateo.14 dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2005, 10h46
  4. [lib] Traitement d'images
    Par Gogoye dans le forum Multimédia
    Réponses: 4
    Dernier message: 19/11/2004, 16h15
  5. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo