[OpenCV; Python] Résumé de la fonction findcontours

Je n'ai pas trouvé d'explication détaillée de la version Python d'OpenCV findcontours sur le net, alors j'aimerais noter ce que j'ai essayé. Si vous faites une erreur, veuillez la signaler.

fonction findcontours

Si vous souhaitez extraire le contour d'une image avec OpenCV, utilisez une fonction appelée findContours. L'image d'entrée est utilisée comme premier argument, le mode d'extraction est utilisé comme deuxième argument et la méthode d'approximation est utilisée comme troisième argument.

fonction findcontours


image, contours, hierarchy = cv2.findContours(Image d'entrée,Mode d'extraction,Méthode approximative)

Cet article n'explique pas la méthode d'approximation. Nous utilisons une méthode d'approximation unifiée appelée cv2.CHAIN_APPROX_SIMPLE```.

Différence dans l'extraction des contours de la tache noire et blanche

Blob signifie «bloc» et fait référence à une masse de pixels noirs ou blancs. Dans l'extraction de contour, il semble que la méthode d'extraction du contour diffère entre le contour de la goutte blanche et le contour de la goutte noire, je vais donc l'expliquer ci-dessous.

Contour de tache noire

Le contour de la goutte noire semble extraire les sommets de la matrice la plus externe de la goutte dans le sens antihoraire. image

Contour de goutte blanche

Le contour de la goutte blanche semble extraire l'extérieur de la matrice la plus externe de la goutte dans le sens des aiguilles d'une montre, comme illustré dans la figure ci-dessous. image

Priorité

Lors de la détection du contour de l'extérieur, le noir est détecté en premier. Ainsi, si vous avez une goutte noire sur fond blanc, la goutte noire sera détectée en premier, mais si vous avez un fond noir, l'arrière-plan noir sera détecté en premier. La prudence est de mise.

Ce que j'ai remarqué

--La matrice de couche la plus externe de l'image n'est pas extraite en tant que contour. image Les couches les plus externes de l'image (0 ligne, 9 lignes, 0 colonne, 9 colonnes dans l'image ci-dessus) n'ont pas été extraites en tant que contours. Dans l'image ci-dessus, par exemple, lorsque l'extraction de contour est effectuée dans le mode d'extraction RETR_EXTERNAL```, la sortie est la suivante.

production


[array([[[1, 1]],

       [[1, 8]],

       [[8, 8]],

       [[8, 1]]])]

L'ordre dans lequel les contours des taches sont détectés semble être dans l'ordre décroissant de la valeur y des coordonnées du point de départ de l'extraction du contour. Si les valeurs y sont égales, l'ordre des valeurs x les plus élevées est antérieur.

Mode d'extraction

Il existe au moins quatre modes d'extraction: RETR_EXTERNAL, `` `` RETR_LIST, RETR_CCOMP, et `` `` RETR_TREE.

RETR_EXTERNAL RETR_EXTERNAL est un mode qui extrait uniquement le contour le plus à l'extérieur du contour. Même s'il y a un contour à l'intérieur du contour, il ne sera pas extrait. Par conséquent, le contour de la goutte blanche n'est pas détecté. image

production


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]])]

RETR_TREE RETR_TREE est une représentation parfaite des contours imbriqués. En d'autres termes, détectez d'abord les taches noires dans l'ordre expliqué dans "Ce que j'ai remarqué", et quand je trouve une goutte avec une structure imbriquée, j'extraire le contour de la goutte dans cette goutte. image

production


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]]), array([[[3, 3]]])]

RETR_LIST RETR_LIST obtient les contours dans la même hiérarchie quel que soit le contour blanc, le contour noir, à l'intérieur ou à l'extérieur. Par conséquent, l'ordre d'acquisition des contours est l'ordre expliqué dans "・ Ce que j'ai remarqué". image

production


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[3, 3]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]])]

RETR_CCOMP RETR_CCOMP extrait d'abord tous les contours des blobs noirs, puis extrait les contours des blobs blancs. La commande sera la commande expliquée dans "・ Ce que j'ai remarqué". image

production


[array([[[7, 7]],

       [[7, 8]],

       [[8, 8]],

       [[8, 7]]]), array([[[3, 3]]]), array([[[1, 1]],

       [[1, 5]],

       [[5, 5]],

       [[5, 1]]]), array([[[1, 2]],

       [[2, 1]],

       [[4, 1]],

       [[5, 2]],

       [[5, 4]],

       [[4, 5]],

       [[2, 5]],

       [[1, 4]]])]

Recommended Posts

[OpenCV; Python] Résumé de la fonction findcontours
Résumé des arguments de la fonction Python
Résumé des arguments Python
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
[python] Valeur de l'objet fonction (?)
[Python] L'origine du nom de la fonction python
Construction d'environnement de python et opencv
Résumé Python
fonction python ①
[Python] fonction
Un bref résumé de la collection Python
Résumé Python
Résumé des index et des tranches Python
fonction python ②
Etude de base d'OpenCV avec Python
[Python] Résumé de l'utilisation des pandas
[Python2.7] Résumé de l'utilisation d'unittest
Résumé des méthodes intégrées, etc. de la liste Python
Résumé de l'utilisation de la liste Python
Introduction facile de la série python3 et d'OpenCV3
Résumé de la spécification des options d'axe de Python "numpy.sum (...)"
fonction d'énumération python
Python2.7 + CentOS7 + OpenCV3
Résumé du didacticiel Python
Python> fonction> Fermeture
[Python] Fonction de générateur
Les bases de Python ①
Bases de python ①
Copie de python
Exemples OpenCV (Python)
[Remarque] openCV + python
Python> fonction> Fonction interne
résumé relatif à python
Décorateur de fonction Python
Résumé des bases de Python
Dessiner un graphique d'une fonction quadratique en Python
Résumé de la correspondance entre les opérations de tableau ruby et python
Exemple de prise de Python> function> * args comme argument
Comparaison des performances du détecteur de visage avec Python + OpenCV
Récupérer l'appelant d'une fonction en Python
Résumé de l'utilisation de MNIST avec Python
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
[Python] Résumé des opérations sur les fichiers S3 avec boto3
Résumé des tableaux Python fréquemment utilisés (pour moi-même)
Résumé de l'étude de Python pour utiliser AWS Lambda
Résumé relatif aux E / S de python et fortran
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Résumé des opérations Excel utilisant OpenPyXL en Python
[Python] Opération d'énumération
Liste des modules python
[Traitement du langage 100 coups 2020] Résumé des exemples de réponses par Python
À propos des arguments de fonction (python)
installation de python openCV (mémo)
Résumé du didacticiel Python Django
Résumé des outils nécessaires pour analyser les données en Python
[Python of Hikari-] Chapitre 06-02 Fonction (argument et valeur de retour 1)
Temps d'exécution de la fonction (Python)