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

Langage Delphi Discussion :

Delphi et le traitement d'image


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Points : 61
    Points
    61
    Par défaut Delphi et le traitement d'image
    Bonjour à tous,

    Ce n'est peut-être pas le lieu idéal pour poser ma question, mais je n'en trouve pas d'autre... La question est simple : y a-t-il des librairies delphi qui permettent de "nettoyer" une image.
    Un petit exemple valant mieux qu'un long discours, voici donc... un petit exemple : j'ai la photo d'une page d'un vieux livre : papier jauni, petites taches etc. Et je voudrais faire disparaître de mon image le plus possible de "cacas". Une minuscule image valant mieux qu'un petit exemple, j'ai mi un petit jpg en PJ : comment passer de l'image de gauche à celle de droite, voilà ce que je voudrais pouvoir automatiser par programme...

    Il faut savoir que je suis programmeur delphi orienté base de données, et donc un total béotien en traitement d'image, je n'entrave que dalle à l'anti-aliasing, blur, rvb, schmurf et autres sgrouing des spécialistes. Ah oui, je suis un blaireau en math, aussi :-)

    Merci de votre patience !

    PS : S'il n'y a pas de librairie utilisable en delphi, j'imagine que les programmes standard de traitement d'image permettent de faire ce genre de travail ? (je vous l'ai dit, que j'étais une buse en traitement d'image, hein).

  2. #2
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Sinon essayes avec un logiciel style photofiltre gratos en téléchargement (je m'en sers souvent), tu pourras piquer une couleur et la remplacer par une autre, ou bien y'a des menus avec pas mal de filtres, etc...

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    photo d'une page d'un vieux livre : papier jauni, petites taches etc. Et je voudrais faire disparaître de mon image le plus possible de "cacas".
    ... voilà ce que je voudrais pouvoir automatiser par programme...
    S'il s'agit de ne récupérer sur la photo de la page du livre que le texte et/ou un dessin supposés être beaucoup plus foncés que le reste de la page une solution d'automatisation programmable assez simple peut être envisagée :
    1) Convertir le fichier de la photo en un BitMap-Source,
    2) Créer un BitMap-Destination de même taille et de couleur blanche,
    3) Copier depuis le BitMap-Source vers le BitMap-Destination uniquement les points-source dont les composantes R,G et B du pixel sont, soit toutes, soit au moins l'une d'elles, inférieure(s) à une valeur de seuil de par exemple 30 ou 100. La valeur de ce seuil est à déterminer par des essais : avec un seuil de 255 on récupèrerait tous les "cacas" et le fond jauni donc l'idéal est que ce seuil soit aussi faible que possible.
    On peut aussi compliquer un peu en utilisant plusieurs seuils délimitant des plages de couleurs que l'on souhaite soit "laisser passer" soit ignorer.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    Tiens pendant que le sujet est chaud, un bout de code qui crée un BitMap-Destination à partir d'un Bmp-Source en ignorant un certain nombre de couleurs de la source :

    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
    type     pLigScan = ^tLigScan;
             tLigScan = array[Word] of TRGBTriple;
     
    function  BmpCopierSauf(const bmpSrc : tBitMap; SeuilR,SeuilG,SeuilB : integer; UnSeul : boolean) : tBitMap;
    //        Renvoie un BitMap ne retenant de bmpSrc que les couleurs dont la composante :
    //        - R est <= à SeuilR si UnSeul = True,
    //        - ou G est <=  à SeuilG si UnSeul = True,
    //        - ou B est <=  à SeuilB si UnSeul = True,
    //        - et toutes <=  à leur seuil si UnSeul = False.
    var       z,X,Y : Integer; LigS,LigD : pLigScan;
    begin     Result:=nil;
              if bmpSrc=nil then EXIT;
              Assert(bmpSrc.PixelFormat = pf24Bit);
              Result:=tBitMap.create;
              with Result do begin
                   PixelFormat:=pf24bit; width:=bmpSrc.Width; height:=bmpSrc.Height;
              end;
              for Y:=0 to bmpSrc.Height-1 do
              begin LigS := bmpSrc.ScanLine[Y];
                    LigD := Result.ScanLine[Y];
                    for X :=0 to bmpSrc.width-1 do
                    begin if UnSeul then begin
                             if (LigS[X].rgbtRed   <= SeuilR)
                             or (LigS[X].rgbtGreen <= SeuilG)
                             or (LigS[X].rgbtBlue  <= SeuilB) then LigD[X]:= LigS[X];
                          end else begin
                              if  (LigS[X].rgbtRed   <= SeuilR)
                              and (LigS[X].rgbtGreen <= SeuilG)
                              and (LigS[X].rgbtBlue  <= SeuilB) then LigD[X]:= LigS[X];
                          end;
                    end;
    end;
    Exemple d'utilisation et de résultat :
    bmpFinal:=BmpCopierSauf(Image1.Picture.BitMap, 128,128,128, False);
    Image1.Picture.BitMap:=bmpFinal;
    avec la combinaison des paramètres 128,128,128, False
    et des photos-source multicolores il ne reste sur le BitMap-Résult-Final que des parties noires ou très foncées.
    avec les mêmes paramètres et True au lieu du False le nombre de couleurs qui passent est plus important.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre du Club
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Points : 61
    Points
    61
    Par défaut Parfait !
    Mais c'est absolument très assurément exactement parfaitement totalement précisément ce que je recherchais !
    Merci à tous !

    On ne le dira jamais assez,
    developpez,
    c'est supez !

    M'en vais clôturer l'échange.

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

Discussions similaires

  1. Traitement d'image en Delphi
    Par ditchou dans le forum Débuter
    Réponses: 13
    Dernier message: 07/02/2008, 16h58
  2. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  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