Bonjour,
Ayant débuté à bidouiller processing il y a peu sous les conseils avisés de mes professeurs et rencontrons quelques difficultés pour un projet, je m'en remet à votre science pour me donner un petit coup de main
Enfaite, comme indiquer dans le titre je cherche à générer du motif à partir de ma webcam en répétant l'image obtenue par la webcam avec des effets de miroir, sachant d'avance que mon explication ne serait pas des plus claires par écris je vous ai fait un petit schémas ^^'
Après avoir tenté de multiple action type rotate(); je suis tombé sur un article de votre forum qui m'a permit d'avancer un peu, à savoir que je suis arrivé à faire une symétrie verticale grâce à ce fragment de code :
for(int i = 0; i < width; i++){ for(int j = 0; j < height; j++){ pixels[j*width + width-1 - i] = video.pixels[j*width + i];
Ensuite, je me suis dit qu'il suffirait de remplacer "width" par "height" et les "i" par des "j" etc. dans la dernière ligne de code pour obtenir une symétrie horizontale, hélas ce n'est pas le cas
Du coup j'aimerais savoir si c'est possible,
1) Comment réaliser une symétrie horizontale de mon image ?
2) Comment afficher à l'écran à la fois l'image de base et celles ou l'on a appliqué des symétrie (comme dans le schémas)
3) Et, enfin si il est possible d'appliquer une fois tous cela réaliser, un filtre type noir et blanc par exemple sur l'image de base et que cela s'applique en même temps sur toutes les autres "copies" présentes.
Pour l'instant, je suis arrivé uniquement à afficher une image disposant d'une symétrie verticale en utilisant le code suivant :
Merci d'avance pour l'aide que vous m'apporterez
Hors ligne
Bonsjours...
Pour une symétrie horizontale seulement à l'affichage :
http://codelab.fr/3353#p17818
Pour une symétrie horizontale qui modifie l'ordre des pixels (pour une image en 640*480):
for (int i =0; i < 640*480; i++) { cam.loadPixels(); camRotate.pixels[(640-1-i%640)+(i/640)*640] = cam.pixels[i]; camRotate.updatePixels(); }
Bon courage.
Hors ligne
Un truc comme çà quoi :
Hors ligne
Merci à tous les deux !
Mushussu c'est exactement ça, c'est génial
Je vais essayer de continuer à bidouiller le code aujourd'hui et demain pour essayer de créer une interface permettant d'appliquer différents effets aux cases et intégrer le tout à un logo. J'espère arriver à me débrouiller seul, mais dans le cas contraire je repasserai par là.
Merci beaucoup pour votre aide précieuse !
Hors ligne
Bonsoir, je suis de retour avec quelques petites questions, pour commencer j'aimerai essayer d'ajouter des filtres qui modifierai mes images en appuyant sur une touche,pour cela j'ai insérer les lignes de codes suivantes :
if (keyPressed){ video.filter(INVERT); }
Mon problème, je suis obligé de rester appuyer sur une touche pour conserver l'effet et j'aimerais qu'il s'applique durant une durée infini une fois que j'appuie sur la touche, mais je sais pas trop comment faire, peux être l'endroit ou j'ai placé ces lignes dans le code ?
Et j'aimerais juste comprendre une autre chose, en règle générale pour afficher la vidéo, j'ai appris à utiliser une fonction du type : image(vidéo,0,0,width,height) , or je voie pas de fonction dans ce genre, du coup j'aimerai savoir qu'est ce qui permet d'afficher les pixels ?
Merci d'avance
Hors ligne
Pour l'effet vidéo, il faut créer une variable globale :
boolean filtre;
Ensuite l'initialiser dans le setup() à false, puis mettre une condition juste après avoir lu la vidéo
if (filtre) { video.filter(INVERT); }
Et enfin dans la méthode keyPressed() inverser l'état de la variable à chaque pression de touche :
void keyPressed() { filtre = !filtre; }
En fait, le travail est fait directement avec les pixels de la fenêtre.Le tableau pixels[] est le tableau permettant d'agir sur le pixels de la fenêtre et updatePixels() les affiche :
http://processing.org/reference/pixels.html
Hors ligne
Ok très bien, j'essaye ça dans la journée,
Merci beaucoup !
Hors ligne
Bon j'espère que je suis pas trop relou mais j'y arrive pas, j'ai bricolé un truc mais je crois que j'ai un soucis au moment d'initialiser la variable.
Voilà mes bricoles :
Hors ligne
Tu as bon, seulement il faut mettre la condition juste après le video.read();
if (video.available()) { video.read(); if (filtre) { video.filter(INVERT); } }
Hors ligne
GÉNIAL, GÉNIAL, GÉNIAL
Je continue en espérant ne plus avoir à vous embêter ^^'
Hors ligne
Bon je crois que j'arrive à mon dernier problème, j'ai envie d'insérer une image avec des transparence qui servira de masque sur mes motifs lorsque j'appuie sur une touche également, mais quand je l'intègre tous simplement avec un image(masque,0,0) je retrouve le même problème qu'avec les filtres à savoir que l'image ne reste pas à l'écran. J'ai donc essayé de bidouiller un truc à nouveau en suivant la même structure que les pour les filtres, mais j'ai un joli message d'erreur qui me dit "cannot convert from PImage to boolean" , ce qui me semble plutôt logique, mais je ne sais pas comment contourner ce souci...
Mon code pour l'instant :
Hors ligne
Il faut considérer la superposition d'image comme un nouveau filtre. Ensuite tu mixes l'image issue de la webcam avec celle issue de ton fichier :
Hors ligne
Je comprend pas trop comment fonctionne video.blend ça me crée bien un masque mais qui ne suis pas la forme de l'image de base importé
Hors ligne
J'avais pour mon test pris une image 320 x 200 comme la vidéo.
Essaie ceci :
video.blend(masque1, 0, 0, masque1.width, masque1.height,0, 0, video.width, video.height, BLEND);
Hors ligne
Pages: 1