Bonjour.
Ce que je voudrais faire c'est :
1) capturer la vidéo par une WebCam
2) Modifier "la vidéo" en appliquant par ex un filtre rouge
3) l'afficher... en espérant que le traitement image par image ne soit pas trop long et rende qq chose qui soit assez fluide.
Alors pour l'instant ,j'arrive à capturer la vidéo d'une webcam , appliquer un filtre à une image , quand je clique sur un bouton "Filtre" et afficher le résultat ... ce que je voudrais faire maintenant ,c'est la modification "en temps réel" de ce que vois la caméra.
Voila à quoi ressemble ce que j'ai réalisé.
Tout à gauche, un panel contenant l'image Capturée/Filrée
Tout à droite , la vidéo qui s'affiche en tps réel.
J'ai mis comme code sur le bouton "Restore" : (c'est simplement pour que je puisse commencer le traitement quand je le désire .. mais le bouton restore n'avait pas cette tache à la base ... c'est juste temporaire)
Code :
- public void actionPerformed(ActionEvent e) {
- Component c = (Component)e.getSource();
- if (c==acquis) {
- /** etc....**/
- }
- /**etc...**/
- if (c==restore) {
- compteur=0;
- while(compteur<2) { // Qui deviendra une boucle
- //sans fin par la suite , pour vérifier le bon fonctionnement
- // du prog
- acquis.doClick();
- filtreR.doClick();
- compteur++;
- imgPanel.setImage(img);
- for(int i=0;i<100000000;i++){
- //Boucle immonde sensé simuler une pause ...
- }
- System.out.println("Ok" );
- }
- }
|
Donc le prog est sensé simuler un appui sur Acqui . Ce qui charge en mémoire l'image (dans un objet de type Image) que l'on voit à la caméra ,mais ne l'affiche pas .
Puis un appui sur filtre qui opère sur l'image chargé.
Enfin , j'affiche l'image dans le panel tout à gauche.
Voila le pb : Le compteur est à deux , donc je devrais voir 2 images s'afficher successivement .... tenant compte de la pseudo pause pas propre que j'ai rajouté . Cependant , la première image capturée/filtrée ne s'affiche pas ,uniquement la deuxième s'affiche..... Or je voudrais avoir qq chose qui ressemble à du filtrage temps réel de la vidéo
Une idée ?
Merci d'avance.
C@limerot
NB : Edit :
l'objet imgPanel est un objet de la classe ImagePanel suivante :
Code :
- class ImagePanel extends Panel
- {
- public Image myimg = null;
-
- public ImagePanel()
- {
- setLayout(null);
- setSize(320,240);
- }
-
- public void setImage(Image img)
- {
- this.myimg = img;
- repaint();
- }
-
- public void paint(Graphics g)
- {
- if (myimg != null)
- {
- g.drawImage(myimg, 0, 0, this);
- }
- }
- }
|
Message édité par calimerot le 20-09-2003 à 14:13:50