IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Flou Gaussien sur une Bitmap


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 26
    Points
    26
    Par défaut Flou Gaussien sur une Bitmap
    Bonjour à tous!

    Après avoir récupérer le flux vidéo de ma Webcam afin d'émuler la caméra sur l'émulateur, je souhaite maintenant traiter la trame, je voudrais effectuer un flou Gaussien sur celle ci, bon j'ai déjà utiliser les fonctions native d' OpenCV sa marche mais c'est trop lent j'obtiens une image toute les 5 secondes...

    Donc pourquoi ne pas le faire directement en java, j'ai donc chercher et je suis tomber sur cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Bitmap.createBitmap(Bitmap bitmap, int X, int Y, int width, int height, matrice, boolean filtre);
    donc je me dis génial, je vais pouvoir appliquer ma matrice gaussienne sur la bitmap directement, donc je défni ma matrice comme ceci :

    Bon je prend un flou moyen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Matrix matrice = new Matrix();
        	float [] value = {1/9  ,1/9 , 1/9,
        			   1/9  ,1/9 , 1/9,
        			   1/9 , 1/9 , 1/9,};
    matrice.setValues(value);
    Puis j'utilise les fonction avec tous ses paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resizedBitmap = Bitmap.createBitmap(resizedBitmap, 0, 0,resizedBitmap.getWidth(),resizedBitmap.getHeight(),matrice, true);
    Mais évidement je me retrouve avec une Exception que je ne comprend pas...

    " Caused by: java.langIllegalArgumentException: widht and height must be > 0 "

    Alors que la largeur et la hauteur de l'image est bien supérieur a 0.
    Ai-je mal compris la fonction? Que faire????

    Je vous remercie d'avance!

    Voici mon code test en entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    package com.android.test;
     
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Bundle;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;
    import android.widget.LinearLayout;
     
     
     
     
    public class test extends Activity {
     
     
     
     
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
     
        	Matrix matrice = null;
        	float [] value = {1/9  ,1/9 , 1/9,
     			   			  1/9  ,1/9 , 1/9,
     			   			  1/9 , 1/9 , 1/9,};
     
        	matrice = new Matrix();
        	matrice.setValues(value);
        	LinearLayout linLayout = new LinearLayout(this);
            super.onCreate(savedInstanceState);
     
         // load the origial BitMap (500 x 500 px)
            Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
                   R.drawable.icon);
     
            /* ! On agrandi l'image */
            Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmapOrg, 100, 100, true);
     
            int width = resizedBitmap.getWidth();
            int height = resizedBitmap.getHeight();
     
            // recreate the new Bitmap
             resizedBitmap = Bitmap.createBitmap(resizedBitmap, 0, 0, width, height, matrice, true);
     
            // make a Drawable from Bitmap to allow to set the BitMap 
            // to the ImageView, ImageButton or what ever
            BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
     
            ImageView imageView = new ImageView(this);
     
            // set the Drawable on the ImageView
            imageView.setImageDrawable(bmd);
     
            // center the Image
            imageView.setScaleType(ScaleType.CENTER);
     
            // add ImageView to the Layout
            linLayout.addView(imageView, 
            	new LinearLayout.LayoutParams(
                          LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT
                    )
            );
     
            // set LinearLayout as ContentView
            setContentView(linLayout);
     
        }
    }

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Salut,

    Il faut mettre la scale de la matrice à 1 , par défault celle-ci doit etre a zéro .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            matrice = new Matrix();
        	matrice.setValues(value);
        	matrice.setScale(1, 1);
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Points : 26
    Points
    26
    Par défaut
    Merci pour la réponse sa compile mais sa ne me donne aucun flou sur l'image...

    J'ai regardé dans la matrice pour voir ce qu'il y avait dedans après le scale je trouve sa :

    matrice.setScale(1,1);

    Matrix{[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0]}

    Hors ce ne c'est pas sa que je veux....
    Il faudrait que la matrice est 1/9 dans toutes ces cases afin de faire le flou, mais je ne sais pas en fait si cette fonction peut réalisé cela...

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 21
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Est-ce que tu as trouvé la solution à ton problème? En effet, je me pose exactement la même question que toi...

    merci d'avance,
    François

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 21
    Points : 0
    Points
    0
    Par défaut
    J'ai trouvé la réponse... En fait la matrice de la fonction createBitmap n'est pas une matrice de convolution (qui permet de faire du flou), c'est une matrice pour les rotations et les changements d'échelle... On ne peut donc pas utiliser ce genre de fonctions pour générer un effet de blur...

    Quelqu'un connaitrait-il une API java(android?) pour faire ça facilement?

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. Textfield semi-transparent sur une bitmap
    Par vincent7894 dans le forum Flex
    Réponses: 8
    Dernier message: 27/05/2011, 12h27
  2. (c#)ou(c++)Rendu OpenGl sur une Bitmap
    Par pointer dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/03/2008, 15h08
  3. Réponses: 3
    Dernier message: 14/04/2007, 21h30
  4. Réponses: 4
    Dernier message: 28/02/2006, 14h25
  5. Réponses: 4
    Dernier message: 25/12/2004, 01h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo