Trova blocchi di colore
Tutorial video 4 - Riconoscimento del colore: https://singtown.com/learn/49993/
funzione trova_blobs
Il tracciamento della palla è la funzione più utilizzata di OpenMV. Puoi trovarla in Inizia rapidamente in 10 minuti.\ I blocchi di colore possono essere trovati tramite la funzione find_blobs. Parliamo dei dettagli di 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)
Ci sono molti parametri qui.
- soglie è la soglia del colore Nota: questo parametro è un elenco e può contenere più colori.Se hai bisogno di un solo colore, allora hai bisogno di un solo valore di colore in questo elenco. Se desideri più soglie di colore, questo elenco richiede più soglie di colore.Nota: è possibile chiamare il metodo del codice sul blob dell'oggetto blocco colore restituito per determinare di quale colore è il blocco colore.
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 è "regione di interesse".È stato introdotto in Statistiche di utilizzo.
sinistra_roi = [0,0,160,240]\ blobs = img.find_blobs([rosso],roi=sinistra_roi)
x_stride è il pixel con la larghezza più piccola nella direzione x del blocco di colore da cercare. Il valore predefinito è 2. Se desideri trovare solo blocchi di colore con una larghezza superiore a 10 pixel, imposta questo parametro su 10:
blobs = img.find_blobs([rosso],x_stride=10)
y_stride è il pixel con la larghezza più piccola nella direzione y del blocco di colore da cercare. Il valore predefinito è 1. Se desideri trovare solo blocchi di colore con una larghezza superiore a 5 pixel, imposta questo parametro su 5:
blobs = img.find_blobs([rosso],y_stride=5)
inverti inverte la soglia e cerca colori diversi dalla soglia come soglie
area_threshold soglia area, se l'area delimitata del blocco colore è inferiore a questo valore, verrà filtrata
pixel_threshold soglia del numero di pixel, se il numero di pixel nel blocco colore è inferiore a questo valore, verrà filtrato
merge Unisci, se impostato su True, quindi unisci tutti i BLOB sovrapposti in uno solo.\ NOTA: questo unirà tutti i BLOB, indipendentemente dal colore.Se vuoi confondere blob di più colori, chiama semplicemente find_blobs con soglie di colore diverse separatamente.
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 del margine, se impostato su 1, verranno uniti anche due blob se sono distanti un pixel.
soglia
La struttura di una soglia di colore è così:
red = (minL, maxL, minA, maxA, minB, maxB)
I valori nella tupla sono rispettivamente i valori massimo e minimo di L A B.
Se desideri ottenere questa soglia nell'immagine IDE, consulta: [Inizia rapidamente in 10 minuti] (/quick-starter.md)
Nella nuova versione dell'IDE è disponibile uno strumento di selezione della soglia più conveniente, vedere di seguito.
Strumento di selezione della soglia di colore
Uno strumento di selezione della soglia è stato aggiunto all'IDE OpenMV, che facilita notevolmente il debug delle soglie di colore.
Per prima cosa esegui hello world.py per consentire al framebuffer nell'IDE di visualizzare il modello.\ \ Quindi aprire Strumenti → Visione artificiale → Editor soglia\
Fare clic su Frame Buffer per ottenere l'immagine nell'IDE e su File immagine per selezionare manualmente un file immagine.
Trascina i sei cursori per vedere i risultati della soglia in tempo reale. Il risultato che vogliamo è trasformare il nostro colore target in bianco e tutti gli altri colori in nero.
BLOB è un elenco
L'oggetto find_blobs restituisce un elenco di più BLOB.(Nota la distinzione tra blob e blob. Questo è solo un nome usato per distinguere più blocchi di colore da un blocco di colore).\ Un elenco è simile a un array nel linguaggio C. Un elenco di BLOB contiene molti oggetti BLOB sono blocchi di colore. Ciascun oggetto BLOB contiene informazioni su un blocco di colore.
blobs = img.find_blobs([red])
I BLOB sono tanti blocchi di colore.
Puoi utilizzare un ciclo for per cercare tutti i blocchi di colore.
for blob in blobs:
print(blob.cx())
Per l'utilizzo dei cicli for, vedere conoscenze di base su Python
oggetto blocco colore blob
Blob ha più metodi:
blob.rect() restituisce la cornice esterna di questo blocco di colore: una tupla rettangolare (x, y, w, h), che può essere utilizzata direttamente in image.draw_rectangle.
blob.x() restituisce la coordinata x (int) del frame esterno del blocco colore, che può essere ottenuta anche tramite blob[0].
blob.y() restituisce la coordinata y (int) del frame esterno del blocco colore, che può essere ottenuta anche tramite blob[1].
blob.w() restituisce la larghezza w (int) del frame esterno del blocco colore, che può essere ottenuta anche tramite blob[2].
blob.h() restituisce l'altezza h (int) del frame esterno del blocco colore, ottenibile anche tramite blob[3].
blob.pixels() restituisce il numero di pixel del blocco colore (int), che può essere ottenuto anche tramite blob[4].
blob.cx() restituisce la coordinata x del centro (int) del frame esterno del blocco colore, che può essere ottenuta anche tramite blob[5].
blob.cy() restituisce la coordinata y del centro (int) della cornice esterna del blocco colore, che può essere ottenuta anche tramite blob[6].
blob.rotation() restituisce l'angolo di rotazione del blocco colore in radianti (float).Se il blocco colore assomiglia ad una matita, questo valore sarà 0~180°.Se il campione di colore è un cerchio, questo valore è inutile.Se il blocco colore non ha alcuna simmetria, otterrai 0~360°, che può essere ottenuto anche tramite blob[7].
blob.code() restituisce un numero a 16 bit, ogni bit corrisponde a ciascuna soglia.Per esempio:
blobs = img.find_blobs([rosso, blu, giallo], merge=Vero)
Se il blocco colore è rosso, il suo codice è 0001, se è blu, il suo codice è 0010.Nota: un blob può essere unito. Se è un blob rosso e blu, il blob è 0011.Questa funzione può essere utilizzata per trovare i codici colore.Può anche essere ottenuto tramite blob[8].
blob.count() Se merge=True, più BLOB verranno uniti in un unico BLOB e questa funzione restituisce questo numero. Se merge=False, il valore restituito è sempre 1. Può anche essere ottenuto tramite blob[9].
blob.area() restituisce l'area del riquadro esterno del blocco colore. Dovrebbe essere uguale a (w * h)
blob.density() restituisce la densità della macchia di colore.Questo è uguale al numero di pixel nella patch diviso per l'area del riquadro di delimitazione.Se la densità è bassa, il bersaglio non è bloccato molto bene.\ Ad esempio, per identificare un cerchio rosso, il blob.pixels() restituito è il numero di pixel del cerchio di destinazione e blob.area() è l'area del quadrato circoscritto del cerchio.