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] Ouvrir / Enregistrer une Image


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut [OCaml] Ouvrir / Enregistrer une Image
    Bonsoir,

    Je suis souhaite dans un premier temps à ouvrir une image de mon disque dur et l'afficher dans la fenêtre graphique Graphics d'OCaml.

    J'ai vu que CamlImage permettait de faire cela http://pauillac.inria.fr/camlimages/
    Mais je ne trouve pas de doc parlant de ImageLoad.
    (sans compter sur le dump_image, etc je n'ai pas saisi encore)


    Donc je ne vais pas chercher à faire plus compliqué à savoir
    - ouvrir une image n'importe où sur le disque
    - enregistrer l'image


    Si vous pouviez m'aiguiller pour une doc/des exemples d'utilisation de camlimages, je vous remercie.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Hop, un petit exemple:

    Code ocaml : 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
    (* charge une image quelconque (.jpg,.png... comme supporté par
       camlimages) vers une matrice de triplets (r,g,b) d'entiers :
       (int*int*int)*array*array *)
    let load_rgb_matrix name =
      let img = Images.load name [] in
      let gimg = Graphic_image.array_of_image img in
      let rgb color =
        let quot n = n mod 256, n / 256 in
        let b, rg = quot color in
        let g, r = quot rg in
        r, g, b
      in
      Array.map (Array.map rgb) gimg
     
    (* transforme une matrice de triplets (r,g,b) en une "image graphics"
       de type Graphics.image *)
    let to_graphics rgb_matrix =
      Graphics.make_image
        (Array.map
           (Array.map
              (fun (r, g, b) -> Graphics.rgb r g b))
           rgb_matrix)
     
     
    let map_matrix f matrix = Array.map (Array.map f) matrix
     
    let invert_colors = map_matrix
      (fun (r, g, b) -> (255-r, 255-g, 255-b))
     
     
    let () =
      (* charge l'image donnée en argument : "./test truc.png" *)
      let test = load_rgb_matrix Sys.argv.(1) in
      Graphics.open_graph " 800x600";
      (* dessine l'image une première fois *)
      Graphics.draw_image (to_graphics test) 0 0;
      ignore (Graphics.read_key ());
      (* dessine l'image avec les couleurs inversées *)
      Graphics.draw_image (to_graphics (invert_colors test)) 0 0;
      ignore (Graphics.read_key ());
      Graphics.close_graph ()

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Bluestorm, un petit point de détail, tu définis map_matrix mais tu ne l'utilises pas.
    (en fait si, mais une seule fois alors qu'elle peut servir presque partout).

    Cordialement,
    Cacophrène

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    La raison pour laquelle je ne m'en suis pas servie dans les deux premières fonctions, c'est parce que je m'attends à ce qu'elles soient copiée de mon code autre part, et que j'essaie donc de les faire les plus autonomes possibles. `map_matrix` est là pour signaler le motif commun, et peut-être encourager le lecteur à l'utiliser aussi, mais la priorité c'est d'arriver à charger des images.

  5. #5
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    D'accord, c'est cohérent.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Réponses très rapides, je vous remercie.

    Je suis en train d'essayer de comprendre la manipulation, je n'ai pas envie de copier bêtement.
    Cependant j'ai copié bêtement quand même pour voir ce que ça peut donner. Malheureusement quand je veux lancer le code j'obtiens un

    Reference to undefined global `Graphic_image'


    Actuellement j'ai dans les chargements de librairies
    #directory "+labltk";;
    #load "labltk.cma";;
    #load "graphics.cma";;


    J'ai rajouté :
    #directory "/usr/lib/ocaml/3.10.0/camlimages/";;
    #load "ci_core.cma";;
    #load "ci_png.cma";;
    #load "ci_jpg.cma";;
    Qu'est ce que j'ai oublié ?

  7. #7
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Normalement il suffit de lancer ocaml avec -I +camlimages et camlimages.cma qui nécessite graphics.cma. Ou alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #directory "+camlimages";;
    #load "graphics.cma";;
    #load "camlimages.cma";;
    #
    Cordialement,
    Cacophrène

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Malheureusement cela ne fonctionne pas.

    Mon #load "ci_jpg.cma";; mis au vol, n'est pas bon, il me le dit.

    Mais en mettant ce que tu m'as proposé, j'ai toujours la même chose.

  9. #9
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Citation Envoyé par harribo
    Malheureusement cela ne fonctionne pas.

    Mon #load "ci_jpg.cma";; mis au vol, n'est pas bon, il me le dit.

    Mais en mettant ce que tu m'as proposé, j'ai toujours la même chose.
    Je vais réinstaller camlimages 2.2 sur mon ordi et tester un peu plus... mes souvenirs de cette lib commencent à dater.

    Cordialement,
    Cacophrène

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Pour information, moi j'utilise ocamlfind et tout marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlfind ocamlc -o tes -package camlimages -linkpkg test.ml
    (Ça devrait aussi marcher dans le toplevel : #use topfind;; #require "camlfimages";

  11. #11
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Oui, ocamlfinf a l'air bien utile avec ces libs... c'est tentant.
    De mon côté je me demande quelle version de camlimages utilise le PO ? La 2.2 ?

    Cordialement,
    Cacophrène

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Étant donné que j'ai repris (et un peu adapté) un morceau de code que j'avais écrit il y a maintenant 5 ans, je pense que ça ne fait pas une grosse différence.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    ReBonjour,
    Merci de votre attention et désolé de n'avoir pas répondu plus tôt, je me suis penché sur un autre projet et j'ai laissé de côté un peu celui-ci. Mais je vais le reprendre

    Qu'entends-tu par
    De mon côté je me demande quelle version de camlimages utilise le PO ? La 2.2 ?
    Il me semble que de mon côté, Synaptics (Ubuntu) me proposait la 1.3ou1.6.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    J'ai enfin réussi à télécharger camlimages-2.2 du site d'Inria : auparavant : j'avais un "Impossible blablabla..."

    Mais j'ai un souci à l'installation, visiblement au "make"

    Voici ce que j'ai fait:
    tar xzvf camlimages-2.2.0.tgz
    cd camlimages-2.2
    ./configure --prefix /home/harrribo
    make ; make install

    harrribo@harrribo-desktop:~/camlimages-2.2$ make
    for i in corelib ppm bmp xvthumb jpeg tiff gif png xpm ps graphics freetype lablgtk2; do (cd $i; make byt) || exit $?; done
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/corelib »
    ocamlc -c camlimages.ml
    ocamlc -c color.ml
    ocamlc -c bitmap.ml
    File "bitmap.ml", line 329, characters 8-12:
    Warning Y: unused variable size.
    if test "X" = "X"; then \
    ocamlc -a -linkall -o ci_core.cma \
    camlimages.cmo mstring.cmo color.cmo region.cmo tmpfile.cmo bitmap.cmo genimage.cmo rgba32.cmo rgb24.cmo index8.cmo index16.cmo cmyk32.cmo images.cmo oColor.cmo oImages.cmo reduce.cmo geometry.cmo colorhist.cmo blend.cmo ; \
    else \
    ocamlmklib -linkall -o ci_core \
    camlimages.cmo mstring.cmo color.cmo region.cmo tmpfile.cmo bitmap.cmo genimage.cmo rgba32.cmo rgb24.cmo index8.cmo index16.cmo cmyk32.cmo images.cmo oColor.cmo oImages.cmo reduce.cmo geometry.cmo colorhist.cmo blend.cmo ; \
    fi
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/corelib »
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/ppm »
    make[1]: Rien à faire pour « byt ».
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/ppm »
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/bmp »
    make[1]: Rien à faire pour « byt ».
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/bmp »
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/xvthumb »
    make[1]: Rien à faire pour « byt ».
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/xvthumb »
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/jpeg »
    make[1]: Rien à faire pour « byt ».
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/jpeg »
    make[1]: entrant dans le répertoire « /home/harrribo/camlimages-2.2/tiff »
    ocamlc -ccopt "-I.. -g -O2" -c tiffread.c
    tiffread.c:24:1: attention : « int16 » redéfini
    Dans le fichier inclus à partir de /usr/lib/ocaml/3.10.0/caml/mlvalues.h:20,
    à partir de tiffread.c:16:
    /usr/lib/ocaml/3.10.0/caml/compatibility.h:313:1: attention : ceci est la localisation d'une précédente définition
    tiffread.c:25:1: attention : « uint16 » redéfini
    /usr/lib/ocaml/3.10.0/caml/compatibility.h:314:1: attention : ceci est la localisation d'une précédente définition
    tiffread.c: Dans la fonction «open_tiff_file_for_read» :
    tiffread.c:54: erreur: «uint16» undeclared (first use in this function)
    tiffread.c:54: erreur: (Each undeclared identifier is reported only once
    tiffread.c:54: erreur: for each function it appears in.)
    tiffread.c:54: erreur: expected «;» before «imagesample»
    tiffread.c:55: erreur: expected «;» before «imagebits»
    tiffread.c:58: erreur: expected «;» before «runit»
    tiffread.c:60: erreur: expected «;» before «photometric»
    tiffread.c:64: erreur: «imagebits» undeclared (first use in this function)
    tiffread.c:65: erreur: «imagesample» undeclared (first use in this function)
    tiffread.c:66: erreur: «runit» undeclared (first use in this function)
    tiffread.c:69: erreur: «photometric» undeclared (first use in this function)
    make[1]: *** [tiffread.o] Erreur 2
    make[1]: quittant le répertoire « /home/harrribo/camlimages-2.2/tiff »
    make: *** [byt] Erreur 2
    harrribo@harrribo-desktop:~/camlimages-2.2$

    Comme fixer cela ? Merci.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Après avoir lancé le configure, va dans "config.h" et vire la ligne qui parle de TIFF. Ensuite "make" n'essaiera pas de compiler le code de tiff, qui est vieux et cassé.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut Nouvelle erreur
    J'obtiens désormais cette erreur :


    cp -pfR Makefile.config /usr/lib/ocaml/3.10.0/camlimages
    cp -pfR config.h /usr/lib/ocaml/3.10.0/camlimages
    ranlib /usr/lib/ocaml/3.10.0/camlimages/*.a
    ranlib: could not create temporary file whilst writing archive: No more archived files
    make: *** [install] Erreur 1


    Et quand j'essaye de lancer mon .ml, j'ai un cannot find camlimages.cma, donc pas insallé.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    C'est encore moi


    Une connaissance m'a dit d'utiliser "Convert" sur linux qui me permet de convertir mes images .jpg (par exemple) et donc me passer de camlimages.


    J'ai cherché sur google , mais je n'ai pas trouvé en quoi cela m'est vraiment utile, puisque qu'il faut que je charge mon image dans le module Graphics.
    Moi je m'en fiche si je dois bosser que sur un certain type d'image ou non.

    Si OCaml possède une fonction Chargement/Ouverture/Sauvegarde d'image tant mieux.
    Parce que là Camlimages commence vraiment à m'énerver, j'ai sans cesse des erreurs à l'installation

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 10
    Points
    10
    Par défaut
    Serait-il possible que quelqu'un possédant une version de Camlimages fonctionnant sur son ordinateur puisse l'uploader et me donner le lien ?
    Ainsi que la démarche d'installation ? Merci

  19. #19
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Pour commencer, voici le lien vers camlimages 3.0.2, l'une des toutes dernières versions. Ensuite il faut charger le fichier ocaml.ma4. Au besoin je peux détailler, c'est assez chiant à installer...

    Cordialement,
    Cacophrène

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Si tu utilises debian (ou ubuntu) ou fedora, il existe déjà un paquet précompilé pour ta distribution.

Discussions similaires

  1. ENREGISTRER UNE IMAGE OU UN FICHIER .DOC
    Par manudja dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2005, 13h32
  2. enregistrer une image
    Par meli0207 dans le forum MFC
    Réponses: 35
    Dernier message: 12/07/2005, 09h00
  3. [GLScene] Comment enregistrer une image au format TGA
    Par Invité dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 27/05/2005, 15h12
  4. Enregistrer une image
    Par N@sH dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/05/2005, 10h07
  5. enregistrer une image et un identifiant
    Par dosach dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2004, 17h18

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