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

Caml Discussion :

[ocaml] Récupérer matrice de pixels d'une image


Sujet :

Caml

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [ocaml] Récupérer matrice de pixels d'une image
    Bonjour,
    J'ai un petit problème en objective caml.
    J'aimerais récupérer la matrice de pixels d'une image. J'ai essayé d'utiliser la fonction dump_image en utilisant le code du livre O'Reilly (dispo sur le site de jussieu en ligne) mais en la testant ca ne veut pas vraiment fonctionner :s

    Quelqu'un pourrait m'aider en m'expliquand comment je peux récupérer cette matrice?

    Merci

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Ton image est un fichier sur ton disque dur, ou bien une image au sens du type abstrait du module Graphics ?

    Normalement, dans le second cas, la fonction dump_image doit fonctionner, si tu as bien linker le module Graphics avec ton compilaeur (tâche pas forcément facile il faut l'avouer ).

    Sinon, si tu veux charger une image stockée sur ton disque dur et la transformer en matrice de couleur, c'est déjà plus compliqué. C'est bien pour ça que le livre d'Oreilly dissimule un peu tout l'aspect gestion d'images dans ses exemples (l'application des robots graphiques fait usage du module Marshall : il s'avère que les auteurs ont auparavant utilisés un algorithme pour transformer un fichier image, en une représentation interne Ocaml, qu'ils ont ensuite enregistrer. Mais ils ne donnent malheureusement pas leur algorithme.).

    Dans ce cas, il faut télécharger la librairie Camlimages, l'installer, et ensuite utiliser la fonction OImages.load, puis ensuite la convertir selon son type réèl (généralement via OImages.rgb24). Ensuite, il faut faire une fonction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let transform img=
     let w,h=(img#width,img#heigth) in
      let img_mat= Array.make_matrix w h (0,0,0) in
         for i=0 to w do
         for j=0 to h do
           let pixel=img#get i j in
             img_mat.(i).(j)<-(pixel.r, pixel.g, pixel.b)
         done;
         done;
    img_mat
    (Note : je n'ai pas testé)

    C'est assez lourd, il faut éviter de le faire plusieurs fois.

  3. #3
    Membre régulier Avatar de thomas9501
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 114
    Points
    114
    Par défaut
    Le sujet est assez ancien mais je viens de l'utiliser donc je met la version du code qui marche :

    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
    #directory "/usr/lib/ocaml/3.10.0/lablgtk2/";;
    #load "lablgtk.cma";;
     
    #directory "/usr/lib/ocaml/3.10.0/camlimages/";;
    #load "graphics.cma";;
    #load "ci_core.cma";;
    #load "ci_png.cma";;
     
    open Images;;
    open OImages;;
    open Info;;
    open Graphics;;
    open Graphic_image;;
     
    let transform img =
      let w, h = (img#width, img#height) in
      let img_mat = (Array.make_matrix w h 0) in
        for i = 0 to (w - 1) do
          for j = 0 to (h - 1) do
    	let pixel = img#get i j in
              img_mat.(i).(j) <- (Graphics.rgb pixel.r pixel.g pixel.b)
          done;
        done;
        img_mat
    ;;
     
     
    let image = (OImages.rgb24 (OImages.load "Pique.png" []));;
    let img = (transform image);;
    Attention, toutefois l'image chargée aura pivotée d'un angle de 90° vers la gauche : Donc pour l'afficher dans le bon sens vous avez deux solutions : retravailler la matrice ou (plus simplement) faire pivoter l'image source de 90° vers la droite =)
    On n'est pas le meilleur quand on le croit mais quand on le sait !!

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je relance un peu le débat car j'ai besoin d'aide pour CamlImages.

    Je n'arrive tout simplement pas à l'installer.

    La première étape : ./configure ce passe bien apparemment.
    Mais lorsque je fais 'make', cela ne compile pas, à cause d'une erreur : 'ocamc.opt : command not found'.

    Quelqu'un a la solution ? Ou bien a un autre moyen de récupérer des matrices de pixels d'une image ? ^^

    Merci d'avance !

Discussions similaires

  1. [Langage/Algorithme] Remplir les pixels d'une image dans une matrice
    Par idkwru dans le forum C++Builder
    Réponses: 1
    Dernier message: 30/06/2010, 18h07
  2. Récupérer le code couleur de chaque pixel d'une image
    Par darkwall_37 dans le forum Débuter
    Réponses: 4
    Dernier message: 18/05/2010, 23h14
  3. Réponses: 1
    Dernier message: 08/05/2009, 20h37
  4. Récupérer les coordonnées d'un pixel dans une image
    Par amine52002 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2008, 14h52
  5. Récupérer le nombre de pixel d'une image
    Par Mounr dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/04/2007, 15h01

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