====== Light painting processing ====== Porteur(s) du projet : Mehouas Clément\\ Date : 14/05/2018\\ Licence : libre !\\ Contexte : Cours de programmation\\ ===== Description ===== Le but est de proposer un support virtuel semblable à une ardoise magique où l'on pourrait expérimenter à loisir ce qui fait les joies du lettrage en light painting (sans les contraintes de l'appareil photo/pied/...). L'idée est d'obtenir un outil qui puisse générer une certaines non-maitrise, de petits accidents afin d'obtenir de nouvelles formes typographiques. ===== Codes ===== === Light tracking === Ici, on se sert de la webcam afin de discriminer le point le plus lumineux dans la captation. Cela sers de base à au code suivant. /////////////////////////////////////////////////////////////////////////////////////////////////////////Appel aux librairies import processing.video.*; //Librairie video /////////////////////////////////////////////////////////////////////////////////////////////////////////Déclaration des variables globales Capture cam; //Nom de la variable pour la capture de la webcam int x,y; //Déclaration des entiers ////////////////////////////////////////////////////////////////////////////////////////////////////////Initialisation des variables globales et des paramètres d'affichage void setup() { //Paramètres zone de travail size(640,480); //Taille frameRate (30); //Nombre image par seconde background (0); //Fond noir // printArray(Capture.list()); (obtenir le nom complet de la webcam) cam= new Capture(this,640,480,"name=USB Camera,size=640x480,fps=30"); //Appeler la webcam/Nom/Dimension/fps cam.start(); //Démarer la webcam } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void draw(){ if (cam.available()){ //Si la webcam est disponible... cam.read(); //...afficher ce qu'elle capte } cam.loadPixels(); //Charger l'image pixel par pixel //Trouver les pixels les plus brillants comparer à un pixel noir float maxBri = 0; //Valeur la plus brillante=0 int theBrightPixel =0; //Le pixel le plus brillant=0(pour le moment) for(int i=0; imaxBri){ //si i plus brillant que 0 (le plus brillant par défaut)... maxBri = brightness(cam.pixels[i]); //...alors plus brillant*** theBrightPixel = i; //Le pixel brillant=i } } //Coordonnées du point brillant int x = theBrightPixel % cam.width; //x=reste la division euclidienne int y = floor(theBrightPixel / cam.width); //y=quotien de la division euclidienne //Curseur indiquant le point le plus brillant image(cam,0,0); //position du curseur à l'initialisation du programme fill(#FF0000,20); //Remplir avec rouge peu opaque stroke(255,0,0); //Contour rouge ellipse(x,y,20,20); //Forme du curseur } === Light Painting === Ici, on modifie le premier programme afin de conserver le tracking du point le plus lumineux et de pouvoir dessiner ainsi sur une surface/fond noir. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Appel aux librairies import processing.video.*; //Librairie vidéo /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Déclaration des variables globales Capture cam; //Nom de la variable pour la capture de la webcam ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Initialisation des variables globales et des paramètres d'affichage void setup() { //Paramètres zone de travail size(640, 480); //Taile de la zone frameRate(30); //Nombre d'image par seconde background(0); //Fond noir //printArray(Capture.list()); //obtenir le nom complet de sa webcam pour l'appeler cam = new Capture(this, 640, 480, "name=USB Camera,size=640x480,fps=30", 30); //Appeler la webcam/Nom/Dimension/fps cam.start(); //Démarer la webcam } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void draw() { if(cam.available()){ //Si la webcam est disponible... cam.read(); //...afficher ce qu'elle capte cam.loadPixels(); //Agir au niveau des pixels de la captation loadPixels(); //Même chose qu'au dessus (mais ne fonctionne pas si on le supprime) for(int i=0; i 200) { //Si point brillant supérieur à 200... pixels[i] = color(255); //...Le pixel I est blanc } } updatePixels(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void mouseClicked(){ //Si l'on clique... background(0); //...on charge un fond noir par dessus... } ===== Production ===== {{:wiki:projets:light-painting:light-painting:abcedaire.pdf|}} ===== Références/ressources ===== [[https://github.com/milchreis/processing-imageprocessing|Traitement de l'image]]\\ [[https://github.com/atduskgreg/opencv-processing|Bibliothèque webcam]]\\ {{:wiki:projets:light-painting:light-painting:tracking_video_essai_snake_2_.zip|Alexandra Nolot/Tracking}}\\ [[https://www.youtube.com/watch?v=nCVZHROb_dE|Tutoriel color tracking]] [[https://github.com/frischmilch/tracking-light|Tutoriel light tracking]]