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

C++ Discussion :

traitement des images


Sujet :

C++

  1. #1
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut traitement des images
    Bonjour � vous tous
    Je veux savoir comment je peut cr�er un graphe � partir d'une image en c++?? comme le montre la figure suivante, o� chaque noeud contient un pixel de l'image.
    Nom : image.png
Affichages : 162
Taille : 9,6 Ko

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    D'apr�s toi?

    Je vois deux parties au probl�me, lire l'image et cr�er le graphe.

    Comme ton graphe est un maillage, tu peux utiliser une matrice contenant les poids des aretes, de la taille qui convient (lis � ce sujet les deux entr�es sur les matrices de la faq C++)

  3. #3
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    ui j'ai d�j� pass� l'�tape de la lecture d'image. Ce qui me bloque c'est la mod�lisation de la classe graph

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Pas besoin d'un graphe, c'est juste une matrice avec soit 2 fois plus de ligne, soit 2 fois plus de colonnes.
    Vous pouvez aussi g�n�rer 2 matrices de la m�me taille que l'image, l'un avec le delta horizontal, l'autre avec le delta vertical.

  5. #5
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    vous ne m'avez pas compris
    je suis entrain d'impl�menter un algorithme de segmentation des images par la m�thode ligne de partage d'eau qui est bas� sur les graphes. Donc j'aurai besoin de ce passage l�.

  6. #6
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    La conception de ton graphe devrait �tre simple, mais r�pondre � un besoin

    Tu va forc�ment avoir une classe graphe, qui te propose les services dont tu auras besoin.
    Quelle serait son interface publique?

    Partant de la, tu as deux grandes sortes de solutions:
    • Avec deux classes noeud et aretes,
    • Avec une seule de ces deux classes, parce qu'une seule composante n'a d'utilit� pour l'utilisateur. (g�n�ralement le noeud)


    je te sugg�rais un tableau 2D (ou une version lin�aris�e, c'est pareil)

  7. #7
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    Ui c'est bon, j'ai d�j� cr�e les deux classes "arete" et "Noeud".
    Et j'ai impl�ment� le code suivant dans la classe "Graphe":
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #include "stdafx.h"
    #include "Edge.h"
    #include "Vertex.h"
    #include "MyImage.h"
    #include "Graph.h"
    #include <vector>
     
    using namespace std;
     
    Graph::Graph()
    {
     
    }
     
    Graph::~Graph()
    {
     
    }
     
    //m[][] = new imagepixels();
     
     
     
    //créer des vertex a partir de la matrice
     
     std::vector<Vertex> Graph::noeud(BYTE** M)
    {
    	std::vector<Vertex>liste1;
     
    	for (int i = 0; i < M.Height; i++)
    	{
    		for (int j = 0; j < M.Width; j++)
    		{
    			Vertex v;
    			v.set_id = M[i][j];
    			liste1.push_back(v);
    		}
    	}
    	return liste1;
    }
     
    //creer des edges a partir de la liste des vertex precedente
     
    std::vector<Edge> Graph::edges()
    {
    	std::vector<Vertex> liste2 = noeud();
    	std::vector<Edge> listedge;
     
    	for (int i = 0; i < (liste2.max_size())-1; i++)
    	{
    		Edge e;
    		Vertex v1 = liste2[i];
    		Vertex v2 = liste2[i+1];
    		int weight = abs(v1.get_id - v2.get_id);
    		e.set_eVertP = v1;
    		e.set_sVertP = v2;
    		e.set_weight = weight;
    		listedge.push_back(e);
    	}
     
    	return listedge;
     
    }
    Mon probl�me comment je cr�e la matrice de pixels de mon image?

  8. #8
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Tu l'as, vu que tu dis avoir lu l'image

  9. #9
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    J'ai trouv� un code tout pret de la classe MyImage.
    Mais je ne trouve pas le moyen, comment � partir de l'image je peux extraire la matrice qui contient les pixels de l'image. J'arrive pas � comprendre le code :/
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #include "StdAfx.h"
    #include "MyImage.h"
     
     
     
    MyImage::MyImage(WCHAR* FileName) : Gdiplus::Bitmap((WCHAR*)FileName, FALSE)
    {
    	unsigned i;
    	BitmapData* BmpData;
    	BYTE* PixPtr;
     
    	// Initialisation du nom du fichier
    	this->FileName = new WCHAR[wcslen(FileName) + 1];
    	wcscpy(this->FileName, FileName);
     
    	// Initialisation des dimensions et du format des pixels
    	this->Height = this->GetHeight();
    	this->Width = this->GetWidth();
    	this->PixFormat = this->GetPixelFormat();
     
     
    	// Allocation de l'espace pour la matrice qui contiendra les infos sur les pixels
    	Pixels = new BYTE*[Height];
    	for (i = 0; i<Height; i++)
    		Pixels[i] = new BYTE[Width];
     
    	// Préparation de l'extraction des informations
    	Rect rc(0, 0, Width, Height);
    	BmpData = new BitmapData();
    	this->LockBits(&rc, ImageLockModeRead, this->PixFormat, BmpData);
     
    	// Initialisation de la matrice Pixels
    	if (BmpData)
    	{
    		this->ScanWidth = abs(BmpData->Stride);
    		// MAJ des valeurs des pixels ligne par ligne
    		PixPtr = (BYTE*)BmpData->Scan0;
    		for (i = 0; i<Height; i++)
    			CopyMemory(this->Pixels[i], PixPtr + (i*this->ScanWidth), this->Width);
    	}
    	this->UnlockBits(BmpData);
    	delete BmpData;
     
    }
     
     
     
    MyImage::~MyImage()
    {
    	// Libération de l'espace utilisé par la chaîne FileName
    	if (this->FileName)
    		delete this->FileName;
     
    	// Libération de l'espace utilisé par la matrice Pixels
    	unsigned i;
    	if (Pixels != NULL)
    	{
    		for (i = 0; i<Height; i++)
    			delete[] Pixels[i];
    		delete[] Pixels;
    	}
    	Pixels = NULL;
    	Height = Width = ScanWidth = 0;
    }
     
     
    int MyImage::GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
    {
     
    	UINT  num = 0;          // number of image encoders
    	UINT  size = 0;         // size of the image encoder array in bytes
     
    	Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
    	Gdiplus::GetImageEncodersSize(&num, &size);
    	if (size == 0)
    		return -1;  // Failure
     
    	pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
    	if (pImageCodecInfo == NULL)
    		return -1;  // Failure
     
    	Gdiplus::GetImageEncoders(num, size, pImageCodecInfo);
     
    	for (UINT j = 0; j < num; ++j)
    	{
    		if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)
    		{
    			*pClsid = pImageCodecInfo[j].Clsid;
    			free(pImageCodecInfo);
    			return j;  // Success
    		}
    	}
     
    	free(pImageCodecInfo);
     
    	return -1;  // Failure
     
    }
    Est ce que je dois ajouter une nouvelle m�thode � la classe MyImage.cpp qui permet d'afficher la matrice de pixels ou quoi?? Parce que j'en ai besoin pour la classe Graph.cpp

  10. #10
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    As-tu lu le code que tu proposes ?
    Tu as 2 variables nomm�es Pixels et PixPtr, on peut difficilement faire plus explicite.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  11. #11
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    Oui je vois �a. C'est le code que m'a propos� mon encadreur pour compl�ter le travail. C'est pourquoi j'ai une difficult� � afficher la matrice de pixels. J ene sais pas comment faire

  12. #12
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Demande lui, dans ce cas. Cela lui montrera ton int�r�t.

    Par ailleurs, dans notre faq C++ (rubriques surcharge des op�rateurs), il y a deux entr�es sur les matrices, qui pourraient t'aider.

  13. #13
    Membre r�gulier
    Femme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2015
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2015
    Messages : 9
    Par d�faut
    D'accord
    Je vous remercie

Discussions similaires

  1. Traitement des images dans forms6i
    Par ImedBenMansour dans le forum Forms
    R�ponses: 3
    Dernier message: 19/05/2008, 17h37
  2. Traitement des images RGB
    Par tapouni dans le forum Images
    R�ponses: 6
    Dernier message: 13/05/2008, 17h15
  3. traitement des images 3D en vc++
    Par karimfl dans le forum MFC
    R�ponses: 0
    Dernier message: 23/04/2008, 10h26

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