Trouver des blocs de couleur
Tutoriel vidéo 4 - Reconnaissance des couleurs : https://singtown.com/learn/49993/
fonction trouver_blobs
Le suivi du ballon est la fonction la plus utilisée d'OpenMV. Vous la trouverez dans Démarrer rapidement en 10 minutes.\ Les blocs de couleur peuvent être trouvés via la fonction find_blobs. Discutons des détails de find_blobs.
image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
Il y a de nombreux paramètres ici.
- seuils est le seuil de couleur Remarque : ce paramètre est une liste et peut contenir plusieurs couleurs. Si vous n'avez besoin que d'une seule couleur, vous n'avez besoin que d'une seule valeur de couleur dans cette liste. Si vous souhaitez plusieurs seuils de couleur, cette liste nécessite plusieurs seuils de couleur. Remarque : Vous pouvez appeler la méthode code sur l’objet blob de bloc de couleur renvoyé pour déterminer la couleur du bloc de couleur.
red = (xxx,xxx,xxx,xxx,xxx,xxx)
blue = (xxx,xxx,xxx,xxx,xxx,xxx)
yellow = (xxx,xxx,xxx,xxx,xxx,xxx)
img=sensor.snapshot()
red_blobs = img.find_blobs([red])
color_blobs = img.find_blobs([red,blue, yellow])
roi est "région d'intérêt". Il a été introduit dans Statistiques d'utilisation.
left_roi = [0,0,160,240]\ blobs = img.find_blobs([red],roi=left_roi)
x_stride est le pixel avec la plus petite largeur dans la direction x du bloc de couleur recherché. La valeur par défaut est 2. Si vous souhaitez uniquement rechercher des blocs de couleur d'une largeur supérieure à 10 pixels, définissez ce paramètre sur 10 :
blobs = img.find_blobs([red],x_stride=10)
y_stride est le pixel avec la plus petite largeur dans la direction y du bloc de couleur recherché. La valeur par défaut est 1. Si vous souhaitez uniquement rechercher des blocs de couleur d'une largeur supérieure à 5 pixels, définissez ce paramètre sur 5 :
blobs = img.find_blobs([red],y_stride=5)
invert inverse le seuil et recherche des couleurs autres que le seuil comme seuils
area_threshold zone seuil, si la zone encadrée du bloc de couleur est inférieure à cette valeur, elle sera filtrée
pixels_threshold seuil du nombre de pixels, si le nombre de pixels dans le bloc de couleur est inférieur à cette valeur, il sera filtré
merge Fusionner, si la valeur est True, puis fusionner tous les blobs qui se chevauchent en un seul.\ REMARQUE : Cela fusionnera tous les blobs, quelle que soit leur couleur. Si vous souhaitez mélanger des blobs de plusieurs couleurs, appelez simplement find_blobs avec différents seuils de couleur séparément.
all_blobs = img.find_blobs([red,blue,yellow],merge=True)
red_blobs = img.find_blobs([red],merge=True)
blue_blobs = img.find_blobs([blue],merge=True)
yellow_blobs = img.find_blobs([yellow],merge=True)
- limite de marge, si elle est définie sur 1, alors deux blobs seront fusionnés s’ils sont distants d’un pixel.
seuil
La structure d'un seuil de couleur est la suivante :
red = (minL, maxL, minA, maxA, minB, maxB)
Les valeurs dans le tuple sont respectivement les valeurs maximale et minimale de L A B.
Si vous souhaitez obtenir ce seuil dans l'image IDE, consultez : [Démarrez rapidement en 10 minutes] (/quick-starter.md)
Dans la nouvelle version de l'EDI, il existe un outil de sélection de seuil plus pratique, voir ci-dessous.
Outil de sélection de seuil de couleur
Un outil de sélection de seuil a été ajouté à l'IDE OpenMV, ce qui facilite grandement le débogage des seuils de couleur.
Exécutez d’abord hello world.py pour laisser le framebuffer de l’EDI afficher le modèle.\ \ Ensuite, ouvrez Outils → Mechine Vision → Éditeur de seuil\
Cliquez sur Frame Buffer pour obtenir l'image dans l'EDI et sur Image File pour sélectionner vous-même un fichier image.
Faites glisser les six curseurs pour voir les résultats du seuil en temps réel. Le résultat souhaité est de transformer notre couleur cible en blanc et toutes les autres couleurs en noir.
les blobs sont une liste
L'objet find_blobs renvoie une liste de plusieurs blobs. (Notez la distinction entre les blobs et les blobs. Il s'agit simplement d'un nom utilisé pour distinguer plusieurs blocs de couleur d'un seul bloc de couleur).\ Une liste est similaire à un tableau en langage C. Une liste de blobs contient de nombreux objets blob. Les objets blobs sont des blocs de couleur. Chaque objet blobs contient des informations sur un bloc de couleur.
blobs = img.find_blobs([red])
Les blobs sont constitués de nombreux blocs de couleurs.
Vous pouvez utiliser une boucle for pour rechercher tous les blocs de couleur.
for blob in blobs:
print(blob.cx())
Pour l'utilisation des boucles for, consultez connaissances de base sur Python
objet bloc de couleur blob
Blob a plusieurs méthodes :
blob.rect() renvoie le cadre extérieur de ce bloc de couleur - un tuple rectangulaire (x, y, w, h), qui peut être utilisé directement dans image.draw_rectangle.
blob.x() renvoie la coordonnée x (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[0].
blob.y() renvoie la coordonnée y (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[1].
blob.w() renvoie la largeur w (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[2].
blob.h() renvoie la hauteur h (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[3].
blob.pixels() renvoie le nombre de pixels du bloc de couleur (int), qui peut également être obtenu via blob[4].
blob.cx() renvoie la coordonnée centre x (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[5].
blob.cy() renvoie la coordonnée y centrale (int) du cadre extérieur du bloc de couleur, qui peut également être obtenue via blob[6].
blob.rotation() renvoie l'angle de rotation du bloc de couleur en radians (float). Si le bloc de couleur ressemble à un crayon, cette valeur sera alors comprise entre 0 et 180°. Si la zone de couleur est un cercle, cette valeur est inutile. Si le bloc de couleur n'a aucune symétrie, alors vous obtiendrez 0~360°, qui peut également être obtenu via blob[7].
blob.code() renvoie un nombre de 16 bits, chaque bit correspond à chaque seuil. Par exemple :
blobs = img.find_blobs([red, blue, yellow], merge=True)
Si le bloc de couleur est rouge, son code est 0001, et s'il est bleu, son code est 0010. Remarque : Un blob peut être fusionné. S'il s'agit d'un blob rouge et bleu, alors le blob est 0011. Cette fonction peut être utilisée pour rechercher des codes couleurs. Il peut également être obtenu via blob[8].
blob.count() Si merge=True, alors plusieurs blobs seront fusionnés en un seul blob, et cette fonction renvoie ce nombre. Si merge=False, la valeur de retour est toujours 1. Il peut également être obtenu via blob[9].
blob.area() renvoie la zone de la zone extérieure du bloc de couleur. Doit être égal à (w * h)
blob.density() renvoie la densité de la goutte de couleur. Ceci est égal au nombre de pixels dans le patch divisé par la surface du cadre de délimitation. Si la densité est faible, alors la cible n’est pas très bien verrouillée.\ Par exemple, pour identifier un cercle rouge, le blob.pixels() renvoyé est le nombre de pixels du cercle cible, et blob.area() est l'aire du carré circonscrit du cercle.