Python OpenCV - Trouver des zones noires dans une image binaire
Il existe une méthode/fonction dans le wrapper python de Opencv qui trouve des zones noires dans une image binaire? (comme regionprops dans Matlab)
Jusqu'à maintenant, je charge mon image source, de le transformer en une image binaire via seuil, puis de l'inverser pour mettre en évidence les zones noires (qui sont maintenant blanc).
Je ne peux pas utiliser des bibliothèques tierces telles que cvblobslob ou cvblob
source d'informationauteur Marco L.
Vous devez vous connecter pour publier un commentaire.
Fondamentalement, vous utilisez le
findContours
fonction, en combinaison avec de nombreuses autres fonctions OpenCV prévoit notamment ce but.Fonctions utiles utilisé (surprise, surprise, ils tous apparaissent sur le L'Analyse structurelle et la Forme des Descripteurs page dans le OpenCV Docs):
findContours
drawContours
moments
contourArea
arcLength
boundingRect
convexHull
fitEllipse
exemple de code (j'ai toutes les propriétés de Matlab
regionprops
saufWeightedCentroid
etEulerNumber
- vous pourraitEulerNumber
en utilisantcv2.RETR_TREE
dansfindContours
et en regardant la hiérarchie qui en résulte, et je suis sûr queWeightedCentroid
ne serait pas dur non plus.Après inversion de l'image binaire à virer au noir au blanc, on applique cv.FindContours fonction. Il vous donnera des limites de la région dont vous avez besoin.
Plus tard, vous pouvez utiliser le cv.BoundingRect pour obtenir le minimum bounding rectangle autour de la région. Une fois que vous avez obtenu le rectangle de sommets, vous pouvez trouver son centre etc.
Ou pour trouver le centre de gravité de la région, l'utilisation de cv.Moment de fonction après la recherche de contours. Ensuite, utilisez cv.GetSpatialMoments dans les directions x et y. Il est expliqué dans opencv manuel.
Pour trouver de la zone, utilisez cv.ContourArea fonction.
De le transformer en image binaire à l'aide de seuil avec la
CV_THRESH_BINARY_INV
drapeau, vous obtenez seuil + inversion en une seule étape.Si vous pouvez envisager d'utiliser une autre bibliothèque libre, vous pouvez utiliser
SciPy
. Il a une façon très commode de comptage domaines:Si nécessaire, vous pouvez utiliser:
avant d'obtenir une image de masque, qui contient uniquement en noir et blanc, où le blanc sont les objets dans la plage donnée.