yehan13
Messages postés2Date d'inscriptionsamedi 21 février 2009StatutMembreDernière intervention15 juin 2009
-
15 juin 2009 à 11:55
yehan13
Messages postés2Date d'inscriptionsamedi 21 février 2009StatutMembreDernière intervention15 juin 2009
-
15 juin 2009 à 13:06
Hello tout le monde,
étant de ceux qui entre en guerre bien après la bataille j'ai décider de m'intéresser aux possibilités de la webcam avec Flash.
Je voudrais réaliser une installation dans laquelle une webcam film une table blanche sur laquelle ont peu poser des pions de couleurs (rouge, vert, bleu).
Lorsque l'on déplace ces pions ils déclenchent et déplacent des animations.
J'ai réussi à détecter des espaces de couleurs avec un code que j'ai trouvé sur le Jeanphiblog.
En utilisant myBitmapdata et treshold. Mais il demeurent quelques problèmes :
- Il confond certaines zones grises avec du rouges ?
- Je ne sais pas comment récupérer les coordonnés du getColorsBoundRect pour les utiliser sur un movie clip ?
Mais regardez plutôt :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
vid.attachVideo(Camera.get());
leBitmap = new flash.display.BitmapData(160, 120, false, 0);
before = new BitmapData(cam.width, cam.height);
//détermine une origine et une zone pour les filtres
point = new Point(0, 0);
rect = new Rectangle(0, 0, leBitmap.width, leBitmap.height);
this.createEmptyMovieClip("copie", 2);
//ici le filtre de netteté
var mat:Array = [0, -1, 0, -1, 5, -1, 0, -1, 0];
var nettete:ConvolutionFilter = new ConvolutionFilter(5, 5, mat);
// là le flou pour éviter les parasites
var flou:BlurFilter = new BlurFilter(3, 3, 100);
nettete.matrix = mat;
copie.attachBitmap(leBitmap, 0, "auto", true);
run = function () {
leBitmap.draw(vid);
leBitmap.applyFilter(leBitmap, rect, point, flou);
leBitmap.applyFilter(leBitmap, rect, point, nettete);
// Ici je détermine la zone de couleur 1 (l'objet est rouge)
leBitmap.threshold(leBitmap, rect, point, '<', 0xFFFF0000, 0xFFFF0000);
// Ici je détermine la zone de couleur 2
before.threshold(before, rect, point, '<', 0xFF330000, 0xFFFF0000);
// Je les chevauche pour effacer les zones trop sombres qu'il confond avec //le gris, avec blendMode erase pour garder le rouge vraiment rouge
leBitmap.draw(before, new Matrix(), new ColorTransform(), 'erase');
leBitmap.BlendMode("layer");
// Draw pour le blendMode
before.draw(vid);
};
inter = setInterval(this, "run", 100);
this.onMouseDown = function() {
copie._visible = false;
};
this.onMouseDown = function() {
copie._visible = true;
// Ici je check si il détecte la position et la taille de la zone
colourBoundRect=leBitmap.getColorBoundsRect(0xFFFF 0000, 0xFFFF0000,true);
trace(colourBoundRect); // (x=0, y=0, w=50, h=40)
};
Voilà, ne faudrait-il pas contraster l'image d'avantage pour ne pas avoir de parasite ? Mais je ne sais pas comment faire ?
Comment récupérer les coordonnés dans le getBoundRect ?
yehan13
Messages postés2Date d'inscriptionsamedi 21 février 2009StatutMembreDernière intervention15 juin 2009 15 juin 2009 à 13:06
Hello tout le monde,
étant de ceux qui entre en guerre bien après la bataille j'ai décider de m'intéresser aux possibilités de la webcam avec Flash. Je voudrais réaliser une installation dans laquelle une webcam film une table blanche sur laquelle ont peu poser des pions de couleurs (rouge, vert, bleu).
Lorsque l'on déplace ces pions ils déclenchent et déplacent des animations.
J'ai réussi à détecter des espaces de couleurs avec un code que j'ai trouvé sur le Jeanphiblog.
En utilisant myBitmapdata et treshold. Mais il demeurent quelques problèmes :
- Il confond certaines zones grises avec du rouges ?
- Je ne sais pas comment récupérer les coordonnés du getColorsBoundRect pour les utiliser sur un movie clip ?
Mais regardez plutôt :
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
vid.attachVideo(Camera.get());
leBitmap = new flash.display.BitmapData(160, 120, false, 0);
before = new BitmapData(cam.width, cam.height);
//détermine une origine et une zone pour les filtres
point = new Point(0, 0);
rect = new Rectangle(0, 0,
leBitmap.width, leBitmap.height);
this.createEmptyMovieClip("copie", 2);
//ici le filtre de netteté
var mat:Array = [0, -1, 0, -1, 5, -1, 0, -1, 0];
var nettete:ConvolutionFilter = new ConvolutionFilter(5, 5, mat);
// là le flou pour éviter les parasites
var flou:BlurFilter = new BlurFilter(3, 3, 100);
nettete.matrix = mat; copie.attachBitmap(leBitmap, 0, "auto", true);
run = function () {
leBitmap.draw(vid);
leBitmap.applyFilter(leBitmap, rect, point, flou);
leBitmap.applyFilter(leBitmap, rect, point, nettete);
// Ici je détermine la zone de couleur 1 (l'objet est rouge)
leBitmap.threshold(leBitmap, rect, point, '<', 0xFFFF0000, 0xFFFF0000);
// Ici je détermine la zone de couleur 2
before.threshold(before, rect, point, '<', 0xFF330000, 0xFFFF0000);
// Je les chevauche pour effacer les zones trop sombres qu'il confond avec
//le gris, avec blendMode erase pour garder le rouge vraiment rouge
leBitmap.draw(before, new Matrix(), new ColorTransform(), 'erase');
leBitmap.BlendMode("layer");
// Ici je check si il détecte la position et la taille de la zone colourBoundRect=leBitmap.getColorBoundsRect(0xFFFF 0000, 0xFFFF0000,true); trace(colourBoundRect);
Voilà, ne faudrait-il pas contraster l'image d'avantage pour ne pas avoir de parasite ? Mais je ne sais pas comment faire ? Comment récupérer les coordonnés dans le getBoundRect ?