Innholdsfortegnelse:

Opencv Object Tracking: 3 trinn
Opencv Object Tracking: 3 trinn

Video: Opencv Object Tracking: 3 trinn

Video: Opencv Object Tracking: 3 trinn
Video: Object Tracking with Opencv and Python 2024, November
Anonim
Opencv objektsporing
Opencv objektsporing

Deteksjon av bevegelige objekter er en teknikk som brukes i datasyn og bildebehandling. Flere påfølgende rammer fra en video blir sammenlignet med forskjellige metoder for å avgjøre om et objekt i bevegelse blir oppdaget.

Deteksjon av bevegelige objekter har blitt brukt til et bredt spekter av applikasjoner som videoovervåking, aktivitetsgjenkjenning, veistatusovervåking, flyplass sikkerhet, overvåking av beskyttelse langs sjøgrensen og etc.

Bevegelig gjenkjenning er å gjenkjenne den fysiske bevegelsen til et objekt på et gitt sted eller område. [2] Ved å virke segmentering mellom objekter i bevegelse og stasjonært område eller område, kan bevegelsen av objekter i bevegelse spores og dermed analyseres senere. For å oppnå dette, tenk på at en video er en struktur bygget på enkeltbilder, gjenkjenning av bevegelige objekter er å finne forflyttende mål (er) i forgrunnen, enten i hver videoramme eller bare når det bevegelige målet viser det første utseendet i videoen.

Jeg kommer til å bruke kombinasjonen Opnecv og Python for å oppdage og spore objektene basert på fargen

Trinn 1: Tegn et rektangel på det gjenkjente objektet

Hvis datamaskinen din ikke har python eller opencv, kan du følge dette nedenfor

her er python -koden:

import cv2import numpy som np

cap = cv2. VideoCapture (0)

mens det er sant:

_, frame = cap.read () hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)

lavere_gul = np.array ([20, 110, 110])

upper_yellow = np.array ([40, 255, 255])

gul_maske = cv2.inRange (hsv, nedre_gul, øvre_gul)

(_, konturer, _) = cv2.findContours (gul_maske, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

for kontur i konturer:

område = cv2.contourArea (kontur)

hvis (område> 800):

x, y, w, h = cv2.boundingRect (kontur) ramme = cv2.rektangel (ramme, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow ("sporing", ramme)

k = cv2.waitKey (5) og 0XFF

hvis k == 27: pause

cv2.destroyAllWindows ()

cap.release ()

Trinn 2: Spor stien der objektet har flyttet seg

for å spore banen:

for i i område (1, len (sentrumspunkter)): 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)

Trinn 3: Integrering av begge kodene

Jeg skal integrere begge koder

import cv2import numpy som np import tilfeldig fra samlinger import deque

cap = cv2. VideoCapture (1)

# For å holde oversikt over alle punktene der objektet besøkte center_points = deque ()

mens det er sant:

# Les og vend ramme _, ramme = cap.read () frame = cv2.flip (frame, 1)

# Slør rammen litt

blur_frame = cv2. GaussianBlur (ramme, (7, 7), 0)

# Konverter fra BGR til HSV fargeformat

hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)

# Definer nedre og øvre område av hsv -farge for å oppdage. Blå her

lower_blue = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255]) mask = cv2.inRange (hsv, lower_blue, upper_blue)

# Lag elliptisk kjerne

kjerne = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))

# Åpningsmorph (erosjon etterfulgt av utvidelse)

mask = cv2.morphologyEx (mask, cv2. MORPH_OPEN, kjerne)

# Finn alle konturene

konturer, hierarki = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]

hvis len (konturer)> 0:

# Finn den største konturen grutste_kontur = maks (konturer, nøkkel = cv2.contourArea)

# Finn kontursenteret og tegn en fylt sirkel

øyeblikk = cv2.moments (største_kontur) center_of_contour = (int (øyeblikk ['m10'] / øyeblikk ['m00']), int (øyeblikk ['m01'] / øyeblikk ['m00'])) cv2.circle (ramme, center_of_contour, 5, (0, 0, 255), -1)

# Bind konturen med sirkel

ellipse = cv2.fitEllipse (største_kontur) cv2.ellipse (ramme, ellipse, (0, 255, 255), 2)

# Lagre konturens midtpunkt, så vi tegner en linje som sporer den

center_points.appendleft (center_of_contour)

# Tegn linje fra midtpunktene i konturen

for i i område (1, len (sentrumspunkter)): 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 ('original', ramme)

cv2.imshow ('maske', maske)

k = cv2.waitKey (5) og 0xFF

hvis k == 27: pause

cv2.destroyAllWindows ()

cap.release ()

Anbefalt: