[Javascool] Projet traitement d'image pour le Bac

Projet traitement d'image pour le Bac [Javascool] - Java - Programmation

Marsh Posté le 01-05-2014 à 01:47:51    

Bonsoir,
 
Etant en Terminale, spécialité ISN (Informatique et Sciences du Numérique), on nous demande de réaliser un projet à présenter à la fin de l'année. Notre prof nous as fait (vaguement) étudié le langage Javascool, et nous as imposé notre projet. Le mien étant le traitement d'image, c'est à dire un truc qui m'est totalement inconnu.
 
Il faut que je prenne une image, et que je propose plusieurs changement : inversion des couleurs(la photo étant en noir et blanc), effet photomaton etc... Avec toujours l'image originale qui reste afficher.
 
Et je sais absolument pas comment faire ça, je suis perdu à tous les niveaux : autant pour charger l'image depuis mon PC et pour l'inversion des couleurs ça va, mais pour l'effet photomaton et l'affichage de l'image originale ET de l'image modifié en même temps je ne sais pas...
Voilà donc où se situe mon problème, comment garder l'image de base afficher ? Et pour l'effet photomaton si quelqu'un a une idée ?
 
Merci d'avance, je sais que c'est pas le projet le plus palpitant mais voilà, c'est pour le baccalauréat et ça nous est imposé...
 
Bonnes soirée.

Reply

Marsh Posté le 01-05-2014 à 01:47:51   

Reply

Marsh Posté le 01-05-2014 à 11:59:10    

dax003 a écrit :

Bonsoir,
 
Etant en Terminale, spécialité ISN (Informatique et Sciences du Numérique), on nous demande de réaliser un projet à présenter à la fin de l'année. Notre prof nous as fait (vaguement) étudié le langage Javascool, et nous as imposé notre projet. Le mien étant le traitement d'image, c'est à dire un truc qui m'est totalement inconnu.
 
Il faut que je prenne une image, et que je propose plusieurs changement : inversion des couleurs(la photo étant en noir et blanc), effet photomaton etc... Avec toujours l'image originale qui reste afficher.
 
Et je sais absolument pas comment faire ça, je suis perdu à tous les niveaux : autant pour charger l'image depuis mon PC et pour l'inversion des couleurs ça va, mais pour l'effet photomaton et l'affichage de l'image originale ET de l'image modifié en même temps je ne sais pas...
Voilà donc où se situe mon problème, comment garder l'image de base afficher ? Et pour l'effet photomaton si quelqu'un a une idée ?
 
Merci d'avance, je sais que c'est pas le projet le plus palpitant mais voilà, c'est pour le baccalauréat et ça nous est imposé...
 
Bonnes soirée.


 
Pour afficher l'image originale et celle modifiée, le mieux je pense est d'utiliser une image résultat qui contient les deux :

Code :
  1. // http://javascool.gforge.inria.fr/i [...] e.jvs.html
  2. // Voici quelques routines qui permettent de traiter les images sous forme de tableau
  3. // Il faut utiliser reset(width, height, false, false) ou load(name, false, false) pour une image non centrée et non zoomée.
  4. //
  5. // Retourne l'image courante sous forme de tableau monochrome
  6. int[][] getImageArray() {
  7.    int width = getWidth(), height = getHeight(), image[][] = new int[width][height];
  8.   for(int y = 0; y < height; y++)
  9. for(int x = 0; x < width; x++)
  10.   image[x][y] = getPixel(x, y);
  11.  
  12.    return  image;
  13. }
  14. // Retourne l'image courante sous forme de tableau couleur image[x][y][RR, GG, BB]
  15. int[][][] getImageColorArray() {
  16.    int width = getWidth(), height = getHeight(), image[][][] = new int[width][height][3];
  17.    for (int y = 0; y < height; y ++) for (int x = 0; x < width; x ++) image[x][y] = getPixelColor(x, y);
  18.    return  image;
  19. }
  20. // Copie le tableau monochrome dans l'image courante
  21. void setImageArray(int[][] image) {
  22.    int width = image.length, height = image[0].length;
  23.    reset(width, height, false);
  24.    for (int y = 0; y < height; y ++) for (int x = 0; x < width; x ++) setPixel(x, y, image[x][y]);
  25. }
  26. // Copie le tableau couleur image[x][y][RR, GG, BB] dans l'image courante
  27. void setImageColorArray(int[][][] image) {
  28.    int width = image.length, height = image[0].length;
  29.    reset(width, height, false);
  30.    for (int y = 0; y < height; y ++) for (int x = 0; x < width; x ++) setPixel(x, y, image[x][y][0], image[x][y][1], image[x][y][2]);
  31. }
  32. // Redimensionne une image
  33. int[][] resizeimage(int[][] image0, int width, int height) {
  34.    int width0 = image0.length, height0 = image0[0].length;
  35.    int[][] image = new int[width][height];
  36.    for (int y = 0; y < height; y ++) for (int x = 0; x < width; x ++) {
  37.       // Interpolation du pixel en prenant le plus proche voisin
  38.        int x0 = (x * width0) / width, y0 = (y * height0) / height;
  39.       image[x][y] = image0[x0][y0];
  40.    }
  41.    return  image;
  42. }
  43. int[][] filtreInverse(int[][] img) {
  44.    int w = img.length, h = img[0].length;
  45.    int[][] imgInverse = new int[w][h];
  46.    for (int i = 0; i < w; i ++) {
  47.       for (int j = 0; j < h; j ++) {
  48.          imgInverse[w-i-1][j] = img[i][j];
  49.       }
  50.    }
  51.    return imgInverse;
  52. }
  53. void main() {
  54.    load("http://farm3.static.flickr.com/2472/3988198655_d8b12c2328.jpg", false, false);
  55.  
  56.    int[][] imgOriginale = getImageArray();
  57.    sleep(1000);
  58.  
  59.    int[][] imgSymetrie = filtreInverse(imgOriginale);
  60.    int w = imgSymetrie.length, h = imgSymetrie[0].length;
  61.    int[][] imgOriginaleSymetrie = new int[w*2][h];
  62.  
  63.    for (int i = 0; i < w; i ++) {
  64.       for (int j = 0; j < h; j ++) {
  65.        //Copie imgOriginale dans imgOriginaleSymetrie
  66.          imgOriginaleSymetrie[i][j] = imgOriginale[i][j];
  67.          //Copie imgSymetrieginale dans imgOriginaleSymetrie
  68.          imgOriginaleSymetrie[i+w][j] = imgSymetrie[i][j];
  69.       }
  70.    }
  71. setImageArray(imgOriginaleSymetrie);
  72.    //save("test.jpg" );
  73. }


 
Les fonctions au début sont celles de cette page : http://javascool.gforge.inria.fr/i [...] e.jvs.html
On créé ensuite une image résultat de taille (largeur x 2, hauteur) pour contenir les deux images.
 
Le lien de documentation : http://javascool.gforge.inria.fr/v [...] n-etal.pdf

Reply

Marsh Posté le 01-05-2014 à 14:35:11    

Salut, merci de ta réponse !  
 
J'ai déjà vu cette documentation, directement sur Javascool mais je ne comprend pas très bien. Comment je peux faire pour afficher originale et résultat en même temps ?  
 
Désolé j'ai vraiment du mal.
 
Bonne journée.

Reply

Marsh Posté le 01-05-2014 à 16:15:54    

dax003 a écrit :

Salut, merci de ta réponse !  
 
J'ai déjà vu cette documentation, directement sur Javascool mais je ne comprend pas très bien. Comment je peux faire pour afficher originale et résultat en même temps ?  
 
Désolé j'ai vraiment du mal.
 
Bonne journée.


 
Une première solution : en créant une nouvelle image qui contient l'originale et la nouvelle.
Peut être qu'il existe des fonctions d'affichage mais je ne connais pas javascool.
C'est ce que fait le code listé avec Javascool et le proglet codagePixels.
Par contre il faut que les deux images à assembler aient la même taille avec ce code et en niveau de gris, sinon il faut faire quelques petites modifications.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed