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

Python Discussion :

Créer un graphique à partir d'une image [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Créer un graphique à partir d'une image
    Bonjour à tous,
    Dans le cadre de notre seconde année de CPGE BCPST, notre groupe doit réaliser un programme python complexe à présenter lors des oraux.
    Notre groupe souhaite suivre au cours du temps une blatte au sein d'un bac (40x40 cm) à partir d'une vidéo. Cependant, nous ne savons pas comment obtenir les coordonnées de la blatte au sein de ce plan (outre le fait que la blatte n'est pas constitué d'un point unique) puisqu'il faut pour cela définir un graphique à partir de la photo, chose que nous ne savons pas faire. Nous avons penser à effectuer des carrés de couleurs à l'origine souhaitée et aux extrémités pour définir l'échelle (c'est à dire dans les coins qui auront pour coordonnées (40,0); (0,40) et (40,40) donc)
    Cependant, nous ne savons pas si cela est réalisable, et si oui, nous ne savons pas comment partir.

    Sauriez vous nous aider?

    Si oui, merci beaucoup.

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par benbossman Voir le message
    Bonjour à tous,
    Dans le cadre de notre seconde année de CPGE BCPST, notre groupe doit réaliser un programme python complexe à présenter lors des oraux.
    Notre groupe souhaite suivre au cours du temps une blatte au sein d'un bac (40x40 cm) à partir d'une vidéo. Cependant, nous ne savons pas comment obtenir les coordonnées de la blatte au sein de ce plan (outre le fait que la blatte n'est pas constitué d'un point unique) puisqu'il faut pour cela définir un graphique à partir de la photo, chose que nous ne savons pas faire. Nous avons penser à effectuer des carrés de couleurs à l'origine souhaitée et aux extrémités pour définir l'échelle (c'est à dire dans les coins qui auront pour coordonnées (40,0); (0,40) et (40,40) donc)
    Cependant, nous ne savons pas si cela est réalisable, et si oui, nous ne savons pas comment partir.

    Sauriez vous nous aider?

    Si oui, merci beaucoup.
    Les bibliothèques possibles sont par exemple OpenCV, PIL.
    Ceci peut peut-être vous aider :
    http://mecatools.dfournier.free.fr/d...imprimable.pdf
    Pas d'aide par mp.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci, ça a l'air très intéressant, je vais voir de plus près et reposterai plus tard si nous avons encore des problèmes .

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai donc lu tout ça et j'en ai tiré pas mal d'info c'est gentil

    Donc pour pouvoir effectuer les positions, je vais faire en sorte d'obtenir une image en noir et blanc seulement (aucune nuance de gris alors), j'ai écrit un programme qui fonctionne mais le problème est qu'il est très lent (environ 10 minutes) puisqu'il doit traiter pixel par pixel. Or ce projet prend un sens si l'on gagne du temps par rapport à un comptage manuel.
    sauriez vous comment peut-on améliorer ce programme? Le format peut-être?
    Merci
    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
    from PIL import Image
    from math import *
    import os
    os.chdir(r"C:\Users\Benoit\Downloads")
    im=Image.open("photo.jpg ")
    (largeur, hauteur)= im.size
    for x in range(largeur):
        for y in range(hauteur):
            (R,V,B)=im.getpixel ((x,y))
            A=((R+B+V)/3)
            if A<128:
                (R,V,B)=(0,0,0)
                im.putpixel((x,y),(R,V,B))
            else:
                (R,V,B)=(255,255,255)
                im.putpixel((x,y),(R,V,B))
    im.show()

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    2 sources de problème : un ordinateur trop lent ou une image trop grande.
    Pour donner un exemple, votre programme prend chez moi (pc datant d'un an environ) 2 ou 3 secondes avec une image de 1600 * 1067 pixels (514 ko).
    Pas d'aide par mp.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai compris ma source d'erreur finalement, par rapport au programme que j'ai mis ici, un petit print c'était glissé, du coup il me donnait la valeur du pixel à chaque fois d'où le temps long, je ne pensais pas que c'était si flagrant!
    Merci beaucoup!

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    C'est encore moi!
    Cette fois-ci j'ai un problème avec ma fonction barycentre...
    En effet je trouve des valeurs totalement illogique pour les coordonnées (400,460000) par exemple sur une image de dimension (800x600).
    Savez vous d'où vient le problème svp?
    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
    from PIL import Image
    from math import *
    import os
    os.chdir(r"C:\Users\Benoit\Downloads")       #Fonction qui converti la photo en noir et blanc
    im=Image.open("phototest.jpg ")
    im1=Image.open("fondblanc.jpg")
    #print(im.format , im.size , im.mode)        #Donne format, taille et couleurs
    #im.save ("photo.png","png")                 #Créer un png de l'image
    (largeur, hauteur)= im.size
    im2 = Image.new("RGB", (largeur,hauteur), "white")       #Créer une image blanche de même taille pour mettre les points rouges dedans par la suite
    #im2.show()
    for x in range(largeur):
        for y in range(hauteur):
            (R,V,B)=im.getpixel ((x,y))
            #print (R,V,B)
            A=((R+B+V)/3)
            #print (A)
            if A<128:
                (R,V,B)=(0,0,0)
                im.putpixel((x,y),(R,V,B))       #Change la couleur d'un pixel en (R,V,B)
            else:
                (R,V,B)=(255,255,255)
                im.putpixel((x,y),(R,V,B))
    im.show()    
     
                                                 #Fonction barycentre
    M=0
    X=0
    Y=0
    for x in range(largeur):
        for y in range(hauteur):
            (R,V,B)=im.getpixel ((x,y))
            if (R,V,B)==(0,0,0):
                X+=x
                Y+=y
                M+=1
    P=X/M                                       #Abscisse du barycentre
    N=Y/M                                       #Ordonnée du barycentre
    print (M,N)
    Chose étrange, je trouve des bonnes valeurs pour les X mais pour les Y c'est la cata

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Il doit y avoir autre chose que ce que tu nous montres dans le code, même sans tenir compte de la condition on ne peut pas arriver à ces chiffres.
    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
     
    >>> M, X, Y = 0, 0, 0
    >>> for x in range(800):
    ...     for y in range(600):
    ...             X += x
    ...             Y += y
    ...             M += 1
    ... 
    >>> print X, Y, M
    191760000 143760000 480000
    >>> X / M
    399
    >>> Y / M
    299
    >>>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Créer un graphique à partir d'une liste
    Par LUCID3 dans le forum Développement Sharepoint
    Réponses: 13
    Dernier message: 23/04/2015, 03h09
  2. [XL-2013] Créer un graphique à partir d'une table de plus de 100 000 lignes
    Par ClemQ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2014, 12h11
  3. [AC-2003] Créer plusieurs graphiques à partir d'une requête
    Par DonKnacki dans le forum IHM
    Réponses: 4
    Dernier message: 23/06/2011, 09h33
  4. Créer un PDF à partir d'une image
    Par womannosky dans le forum Documents
    Réponses: 6
    Dernier message: 20/04/2009, 13h09
  5. Réponses: 1
    Dernier message: 01/11/2006, 17h36

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