Sommario:
- Passaggio 1: disegnare un rettangolo sull'oggetto riconosciuto
- Passaggio 2: traccia il percorso in cui si è spostato l'oggetto
- Passaggio 3: integrazione di entrambi i codici
Video: Tracciamento di oggetti Opencv: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Il rilevamento di oggetti in movimento è una tecnica utilizzata nella visione artificiale e nell'elaborazione delle immagini. Più fotogrammi consecutivi di un video vengono confrontati con vari metodi per determinare se viene rilevato un oggetto in movimento.
Il rilevamento di oggetti in movimento è stato utilizzato per un'ampia gamma di applicazioni come la videosorveglianza, il riconoscimento di attività, il monitoraggio delle condizioni stradali, la sicurezza degli aeroporti, il monitoraggio della protezione lungo il confine marittimo e così via.
Il rilevamento di oggetti in movimento consiste nel riconoscere il movimento fisico di un oggetto in un determinato luogo o regione.[2] Agendo sulla segmentazione tra gli oggetti in movimento e l'area o regione stazionaria, il movimento degli oggetti in movimento potrebbe essere tracciato e quindi analizzato in seguito. Per ottenere ciò, considera che un video è una struttura costruita su singoli fotogrammi, il rilevamento di oggetti in movimento consiste nel trovare i bersagli in movimento in primo piano, in ogni fotogramma video o solo quando il bersaglio in movimento mostra la prima apparizione nel video.
Userò la combinazione Opnecv e Python per rilevare e tracciare gli oggetti in base al colore
Passaggio 1: disegnare un rettangolo sull'oggetto riconosciuto
se il tuo pc non ha python o opencv, segui le istruzioni di seguito
ecco il codice Python:
import cv2import numpy as np
cap = cv2. VideoCapture(0)
mentre vero:
_, cornice = cap.read() hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)
inferiore_giallo = np.array([20, 110, 110])
giallo_superiore = np.array([40, 255, 255])
yellow_mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
(_, contorni, _) = cv2.findContours(yellow_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
per contorno in contorni:
area = cv2.contourArea(contour)
if(area > 800):
x, y, w, h = cv2.boundingRect(contour) frame = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow("inseguimento", cornice)
k = cv2.waitKey(5) & 0XFF
se k == 27: break
cv2.destroyAllWindows()
cap.release()
Passaggio 2: traccia il percorso in cui si è spostato l'oggetto
per tracciare il percorso:
for i in range(1, len(center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) if math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(frame, center_points[i - 1], center_points, (b, g, r), 4)
Passaggio 3: integrazione di entrambi i codici
ho intenzione di integrare sia il codice
import cv2import numpy as np import random from collection import deque
cap = cv2. VideoCapture(1)
# Per tenere traccia di tutti i punti in cui l'oggetto ha visitato center_points = deque()
mentre vero:
# Leggi e capovolgi frame _, frame = cap.read() frame = cv2.flip(frame, 1)
# Sfoca un po' la cornice
blur_frame = cv2. GaussianBlur(frame, (7, 7), 0)
# Converti da BGR a formato colore HSV
hsv = cv2.cvtColor(blur_frame, cv2. COLOR_BGR2HSV)
# Definisce l'intervallo inferiore e superiore del colore hsv da rilevare. Blu qui
lower_blue = np.array([100, 50, 50]) upper_blue = np.array([140, 255, 255]) mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Crea un kernel ellittico
kernel = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))
# Apertura morph (erosione seguita da dilatazione)
mask = cv2.morphologyEx(mask, cv2. MORPH_OPEN, kernel)
# Trova tutti i contorni
contorni, gerarchia = cv2.findContours(mask.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]
se len(contorni) > 0:
# Trova il contorno più grande large_contour = max(contours, key=cv2.contourArea)
# Trova il centro del contorno e disegna un cerchio pieno
momenti = cv2.moments(biggest_contour) center_of_contour = (int(moments['m10'] / momenti['m00']), int(moments['m01'] / momenti['m00'])) cv2.circle(frame, center_of_contour, 5, (0, 0, 255), -1)
# Delimita il contorno con un cerchio
ellisse = cv2.fitEllipse(biggest_contour) cv2.ellipse(frame, ellisse, (0, 255, 255), 2)
# Salva il centro del contorno in modo da tracciare una linea seguendolo
center_points.appendleft(center_of_contour)
# Traccia una linea dai punti centrali del contorno
for i in range(1, len(center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) if math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(frame, center_points[i - 1], center_points, (b, g, r), 4)
cv2.imshow('originale', cornice)
cv2.imshow('maschera', maschera)
k = cv2.waitKey(5) & 0xFF
se k == 27: break
cv2.destroyAllWindows()
cap.release()
Consigliato:
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi.Parti:1. EkTools punzone grande da 2 pollici; le forme solide sono le migliori.2. Pezzo di carta o c
Tracciamento degli oggetti basato sul rilevamento del colore: 10 passaggi
Tracciamento degli oggetti basato sul rilevamento del colore: storia Ho realizzato questo progetto per imparare l'elaborazione delle immagini utilizzando Raspberry PI e aprire CV. Per rendere questo progetto più interessante ho usato due servomotori SG90 e ci ho montato una telecamera. Un motore utilizzato per muoversi orizzontalmente e il secondo motore utilizzato per muoversi verticalmente
Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: 7 passaggi (con immagini)
Raspberry Pi - Mars Rover autonomo con tracciamento di oggetti OpenCV: alimentato da un Raspberry Pi 3, riconoscimento di oggetti Open CV, sensori a ultrasuoni e motori CC con riduttore. Questo rover può tracciare qualsiasi oggetto per cui è addestrato e muoversi su qualsiasi terreno
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento con le forbici: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento Utilizzo delle forbici: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi. Parti: 1. Forbici (va bene qualsiasi tipo). 2. Pezzo di carta o cartoncino. 3. Indicatore
Tracciamento oggetti - Controllo del montaggio della fotocamera: 4 passaggi
Object Tracking - Camera Mount Control: Ciao a tutti, in questo Instructable vi mostrerò i progressi fatti per il mio Object Tracking Project. Qui potete trovare il precedente Instructable: https://www.instructables.com/id/Object-Tracking/ e qui puoi trovare una playlist di youtube con tutte le t