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 :

rogner une image en cercle [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Points : 6
    Points
    6
    Par défaut rogner une image en cercle
    Bonsoir à tous,

    Dans le cadre de mon stage, je dois écrire un programme qui calcule le nombre de pixels noirs sur une image. Cependant, je dois travailler seulement sur une partie de l'image (il s'agit d'une piste de frottement circulaire). Pour cela, je dois d'abord rogner l'image en traçant un cercle contenant la piste, puis je dois à nouveau tracer un autre cercle plus petit pour le retirer de l'image.

    J'ai trouvé le programme suivant sur internet; il permet de rogner l'image en traçant un rectangle manuellement. Sauriez-vous comment je peux l'adapter pour tracer un cercle à la place?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ... // ask top point (x,y)
    define int WIDTH = 40;
    define int HEIGHT= 40;
    // cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
    cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
    crop_img = img[x:y, WIDTH:HEIGHT] # Crop from x, y, WIDTH , HEIGHT
    ...

    Merci d'avance pour votre aide!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    C'est pas plus simple de directement compter les pixels noirs qui sont sur le cercle ?

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    Quelques petites questions pour mieux cerner le problème :
    l'image est -elle une photo ? Si oui cela m'étonnerait qu'il y ait des pixels de noir pur.
    Peux-tu nous montrer à quoi ressemble cette image ?
    Si tu rentres des coordonnées pour écrire le programme, c'est qu'il y a une intervention sur l'image pour évaluer ces coordonnées. Pourquoi dans ce cas ne pas utiliser un logiciel comme gimp pour détourer ce qui est à exploiter ?
    Si tu utilises opencv pourquoi ne pas utiliser une détection de contour ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Lou.p Voir le message
    J'ai trouvé le programme suivant sur internet; il permet de rogner l'image en traçant un rectangle manuellement. Sauriez-vous comment je peux l'adapter pour tracer un cercle à la place?
    Indépendamment des suggestions déjà proposées, une image est un tableau de pixels et "rectangulaire".
    Impossible de la rogner pour devenir "disque" sauf en trichant i.e. rendre "transparents" les pixels extérieurs (au disque).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Merci pour vos réponses rapides.
    En effet, ce serait plus simple de compter directement le nombre de pixels noirs mais mon tuteur m'impose de rogner l'image dans un premier temps.
    L'image est une photo prise au microscope; je préfère ne pas la partager par soucis de confidentialité. J'ai aussi pensé à passer par un logiciel de traitement d'image mais je dois tout faire sur python. Je vais donc essayer d'utiliser cv.drawContours.

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    pour la détection de contours circulaires avec opencv en python, tu peux aller faire un tour ici :
    detecting-circles-images-using-opencv-hough-circles

    exemple de détection sur une image :
    Nom : houghcircles.PNG
Affichages : 1230
Taille : 265,9 Ko

    coordonnées x,y et rayon trouvés :
    >>> [[348 348 225]]
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    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,

    S'il s'agit de détecter des alignements circulaires de pixels noirs la réponse de jurassic pork sera plus appropriée.
    S'il s'agit de détecter n'importe quel pixel noir dans une zone circulaire, voici une méthode d'extraction circulaire d'image avec PyQt5

    Je pars du principe que je veux extraire une zone de centre x = 620, y = 400 et de rayon = 200.
    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
     
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    SOURCE = "~/Images/Nadar _Sarah_Bernhardt.png"
    TARGET = "~/Images/target.png"
    CENTER = 620, 400
    RADIUS = 200
     
    def get_support():
        """Create the pixmap support for the texture.
     
        Returns:
        QPixmap square filled transparent
        """
        color = QtGui.QColor()
        color.setRgb(0, 0, 0, 0)
        pix = QtGui.QPixmap(QtCore.QSize(RADIUS*2, RADIUS*2))
        pix.fill(color)
        return pix
     
    def draw_path(pix):
        """Draw a circular path into the pixmap.
     
        """
        painter = QtGui.QPainter()
        painter.begin(pix)
        rect = QtCore.QRectF(1, 1, RADIUS*2-2, RADIUS*2-2)
        path = QtGui.QPainterPath()
        path.addEllipse(rect)
        painter.drawPath(path)
        painter.end()
        return path
     
    def fill_circle(pix, path, texture):
        """Draw the texture into the shape 'path'.
     
        """
        painter = QtGui.QPainter()
        brush = QtGui.QBrush()
        brush.setTexture(texture)
        painter.begin(pix)     
        painter.fillPath(path, brush)
        painter.end()
     
    def get_texture(base):
        """Returns the sub-region of image at the current coordinate.
     
        Returns:
        QPixmap
        """
        texture = QtGui.QPixmap(QtCore.QSize(RADIUS*2, RADIUS*2))
        irect = QtCore.QRect(CENTER[0]-RADIUS, CENTER[1]-RADIUS,
                                RADIUS*2, RADIUS*2)
        prect = QtCore.QRect(0, 0, RADIUS*2, RADIUS*2)
        painter = QtGui.QPainter()
        painter.begin(texture)
        painter.drawImage(prect, base, irect)
        painter.end()
        return texture
     
    def main():
        image = QtGui.QImage(SOURCE)
        support = get_support()
        circle = draw_path(support)
        texture = get_texture(image)
        fill_circle(support, circle, texture)
        support.save(TARGET)
     
    if __name__ == "__main__":
        app = QtWidgets.QApplication([])
        main()
    Résultat:
    Nom : target.png
Affichages : 1194
Taille : 90,6 Ko

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide!

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

Discussions similaires

  1. Rogner une image
    Par Invité(e) dans le forum Applets
    Réponses: 1
    Dernier message: 13/05/2008, 16h17
  2. Macro pour rogner une image
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/08/2007, 22h57
  3. Rogner une image
    Par biquet dans le forum Images
    Réponses: 4
    Dernier message: 11/01/2007, 11h47
  4. Rogner une image jpeg ou bmp
    Par Valeyre dans le forum Langage
    Réponses: 10
    Dernier message: 18/10/2005, 11h01
  5. recadrer (rogner) une image
    Par prodi_64 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/10/2004, 11h57

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