From 04ee12c44f2731cf17b6affb9d2d199680b64779 Mon Sep 17 00:00:00 2001 From: Robin VAN DE MERGHEL <robin.van_de_merghel@etu.uca.fr> Date: Thu, 23 Mar 2023 11:57:01 +0100 Subject: [PATCH] New VR Course --- .../Exos/2023-03-22/contours/contours.pde | 238 ++++++++++++++++++ .../Exos/2023-03-22/contours/data/harold.jpeg | Bin 0 -> 14383 bytes 2 files changed, 238 insertions(+) create mode 100644 Realite Virtuelle/Exos/2023-03-22/contours/contours.pde create mode 100644 Realite Virtuelle/Exos/2023-03-22/contours/data/harold.jpeg diff --git a/Realite Virtuelle/Exos/2023-03-22/contours/contours.pde b/Realite Virtuelle/Exos/2023-03-22/contours/contours.pde new file mode 100644 index 0000000..b8d484c --- /dev/null +++ b/Realite Virtuelle/Exos/2023-03-22/contours/contours.pde @@ -0,0 +1,238 @@ +// On ouvre la webcam +// Convertir l'image en Noir et Blanc +// On va calculer le gradient + +import processing.video.*; + +Capture webCam; // Declaration de la Capture par Camera +String[] cameras; // Liste textuelle des webCams disponibles + + +float[][] convolutionMatrix; // Matrice du gradient + +PImage bnwImage; // Image en noir et blanc + +void setup() { + + size(640, 480); + + //On liste les webCams disponibles + cameras = Capture.list(); + + //On ouvre la premiere webCam + webCam = new Capture(this, cameras[0]); + webCam.start(); + + //On initialise l'image en noir et blanc + bnwImage = createImage(width, height, RGB); + +} + +void draw() { + + // On affiche l'image de la webcam + if (webCam.available() == true) { + webCam.read(); + } + + // On convertit l'image en noir et blanc et le stock dans bnwImage + bnwImage = convertToBNW(webCam); + + + // On initialise la matrice du gradient avec des valeurs pour un gradient en croix + convolutionMatrix = new float[][]{ + {0, 1, 0}, + {1, -4, 1}, + {0, 1, 0} + }; + + bnwImage = seuillage(bnwImage, 140); + + bnwImage = stretching(bnwImage); + + // On applique le gradient + bnwImage = convolution(bnwImage, convolutionMatrix); + + // // On fait un seuillage + bnwImage = seuillage(bnwImage, 50); + + + // On affiche l'image en noir et blanc + image(bnwImage, 0, 0); + +} +PImage stretching(PImage img) { + + int min = 255; + int max = 0; + + // On parcourt l'image + for (int x = 0; x < img.width; x++) { + for (int y = 0; y < img.height; y++) { + + // On recupere la couleur de l'image d'origine + int c = img.get(x, y); + + // On recupere les composantes RVB de la couleur + float r = red(c); + float g = green(c); + float b = blue(c); + + // On calcule la moyenne des composantes RVB + float moyenne = (r + g + b) / 3; + + if (moyenne < min) { + min = (int) moyenne; + } + + if (moyenne > max) { + max = (int) moyenne; + } + } + } + + // On cree une image de meme taille que l'image d'origine + PImage stretchingImage = createImage(img.width, img.height, RGB); + + // Tout ce qui est en dessous de min devient noir, tout ce qui est au dessus de max devient blanc + for (int x = 0; x < img.width; x++) { + for (int y = 0; y < img.height; y++) { + + // On recupere la couleur de l'image d'origine + int c = img.get(x, y); + + // On recupere les composantes RVB de la couleur + float r = red(c); + float g = green(c); + float b = blue(c); + + // On calcule la moyenne des composantes RVB + float moyenne = (r + g + b) / 3; + + // On cree une couleur avec la moyenne des composantes RVB + int c2; + if (moyenne < min) { + c2 = color(0, 0, 0); + } else if (moyenne > max) { + c2 = color(255, 255, 255); + } else { + c2 = color(moyenne, moyenne, moyenne); + } + + // On affecte la couleur a l'image en noir et blanc + stretchingImage.set(x, y, c2); + } + } + + // On retourne l'image en noir et blanc + return stretchingImage; + +} + +PImage seuillage(PImage img, int seuil) { + + // On cree une image de meme taille que l'image d'origine + PImage seuillageImage = createImage(img.width, img.height, RGB); + + // On parcourt l'image + for (int x = 0; x < img.width; x++) { + for (int y = 0; y < img.height; y++) { + + // On recupere la couleur de l'image d'origine + int c = img.get(x, y); + + // On recupere les composantes RVB de la couleur + float r = red(c); + float g = green(c); + float b = blue(c); + + // On calcule la moyenne des composantes RVB + float moyenne = (r + g + b) / 3; + + // On cree une couleur avec la moyenne des composantes RVB + int c2; + if (moyenne > seuil) { + c2 = color(255, 255, 255); + } else { + c2 = color(0, 0, 0); + } + + // On affecte la couleur a l'image en noir et blanc + seuillageImage.set(x, y, c2); + } + } + + // On retourne l'image en noir et blanc + return seuillageImage; +} + + +PImage convolution(PImage img, float[][] filter) { + + // On cree une image de meme taille que l'image d'origine + PImage convolutionImage = createImage(img.width, img.height, RGB); + + // On calcule la convolution à partir de la matrice + for (int x = filter.length / 2; x < img.width - filter.length / 2; x++) { + for (int y = filter[0].length / 2; y < img.height - filter[0].length / 2; y++) { + + int norme = 0; + + for (int i = 0; i < filter.length; i++) { + for (int j = 0; j < filter[i].length; j++) { + int c = img.get(x + i - filter.length / 2, y + j - filter[i].length / 2); + float r = red(c); + float g = green(c); + float b = blue(c); + float moyenne = (r + g + b) / 3; + norme += moyenne * filter[i][j]; + } + } + + norme = abs(norme); + + // On cree une couleur avec la moyenne des composantes RVB + int c2 = color(norme, norme, norme); + + // On affecte la couleur a l'image en noir et blanc + convolutionImage.set(x, y, c2); + + } + } + + // On retourne l'image en noir et blanc + return convolutionImage; +} + +// Fonction qui convertit une image en noir et blanc +PImage convertToBNW(PImage img) { + + // On cree une image de meme taille que l'image d'origine + PImage bnwImage = createImage(img.width, img.height, RGB); + + // On parcourt l'image + for (int x = 0; x < img.width; x++) { + for (int y = 0; y < img.height; y++) { + + // On recupere la couleur de l'image d'origine + int c = img.get(x, y); + + // On recupere les composantes RVB de la couleur + float r = red(c); + float g = green(c); + float b = blue(c); + + // On calcule la moyenne des composantes RVB + float moyenne = (r + g + b) / 3; + + // On cree une couleur avec la moyenne des composantes RVB + int c2 = color(moyenne, moyenne, moyenne); + + // On affecte la couleur a l'image en noir et blanc + bnwImage.set(x, y, c2); + } + } + + // On retourne l'image en noir et blanc + return bnwImage; +} \ No newline at end of file diff --git a/Realite Virtuelle/Exos/2023-03-22/contours/data/harold.jpeg b/Realite Virtuelle/Exos/2023-03-22/contours/data/harold.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..363509b7d4d820307f480908034ead4490c7ae0c GIT binary patch literal 14383 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 literal 0 HcmV?d00001 -- GitLab