» codelab : http://codelab.fr/accueil » Forum : Processing : http://codelab.fr/processing » Extraire un morceau d'image en vidéo et l'injecter ailleurs : http://codelab.fr/5396 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : Extraire un morceau d'image en vidéo et l'injecter ailleurs |
upermuk — 2014-11-24 01:53:59 |
Bonsoir, import gab.opencv.*; import processing.video.*; import java.awt.*; Capture video; OpenCV opencvLeft; OpenCV opencvRight; void setup() { size(640, 480); video = new Capture(this, 640/2, 480/2); opencvLeft = new OpenCV(this, 640/2, 480/2); opencvRight = new OpenCV(this, 640/2, 480/2); opencvLeft.loadCascade("/Users/Upermuk/Documents/Processing/libraries/opencv_processing/library/cascade-files/haarcascade_mcs_lefteye.xml", true); opencvRight.loadCascade("/Users/Upermuk/Documents/Processing/libraries/opencv_processing/library/cascade-files/haarcascade_mcs_righteye.xml", true); video.start(); } void draw() { scale(2); opencvLeft.loadImage(video); opencvRight.loadImage(video); image(video, 0, 0 ); noFill(); stroke(0, 255, 0); strokeWeight(1); Rectangle[] leftEye = opencvLeft.detect(2.2, 10, -1, 15, 40); Rectangle[] rightEye = opencvRight.detect(2.2, 10, -1, 15, 40); println(leftEye.length); println(rightEye.length); //cadre oeil gauche for (int i = 0; i < leftEye.length; i++) { //println(leftEye[i].x + "," + leftEye[i].y); rect(leftEye[i].x, leftEye[i].y, leftEye[i].width, leftEye[i].height); delay(60); } //cadre oeil droit for (int j = 0; j < rightEye.length; j++) { stroke(255, 0, 0); rect(rightEye[j].x, rightEye[j].y, rightEye[j].width, rightEye[j].height); delay(60); } //cadre englobant oeil directeur for (int k = 0; k < leftEye.length; k++) { stroke(0,0,255); // if (rightEye[k].y >= leftEye[k].y) { rect(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height); delay(300); PImage shot=get(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height); shot.save("foo-#######.jpg"); //} /* else if (rightEye[k].y <= leftEye[k].y) { rect(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height); delay(300); } else { println("Error drawing boxing"); }*/ } } void captureEvent(Capture c) { c.read(); } Vous verrez qu'il y a également un problème de conditions du cadre des deux yeux. Je voulais mettre une condition pour qu'il supporte un écart plus ou moins grand entre les deux yeux, de sorte qu'on voie toujours les deux yeux ensemble, et qu'il println une erreur si ce n'est pas le cas. rightEye servirait en quelque sorte uniquement à corriger leftEye, qui est visiblement directeur. La condition sur le for avec tous les rectangles, il a pas aimé: au début ça va, mais si on gigote un peu, Processing plante. Mais bon, ça marche quand même sans. |
Mushussu — 2014-11-24 08:57:41 |
Première réponse vite faite. L'image vidéo que tu obtiens est une PImage, donc tu peux lui appliquer la méthode copy() : |
pob — 2014-11-25 00:46:33 |
T'es étudiante en art et tu ne veux pas déclencher un son avec une webcam ???? Mais !! ? |
Carla Hoke — 2014-11-25 12:49:02 |
:lol: |
sakramh — 2014-11-25 14:08:31 |
Un peu de patience, les exams c'est vers Avril . Çà vous laisse le temps de préparer des codes "tout fait" qui déclenchent différentes webcams selon des sons . ;) pi pour une des rares fois où c'est pas : heeeeelp ! un truc clef en main siouplé, rendu pour hier (c'est le prof. qui nous donné cette url) . :lol: |