Indholdsfortegnelse:

Opencv Object Tracking: 3 trin
Opencv Object Tracking: 3 trin

Video: Opencv Object Tracking: 3 trin

Video: Opencv Object Tracking: 3 trin
Video: Object tracking using a Raspberry Pi 3B 2024, November
Anonim
Opencv Objektsporing
Opencv Objektsporing

Registrering af bevægelige objekter er en teknik, der bruges til computersyn og billedbehandling. Flere på hinanden følgende rammer fra en video sammenlignes med forskellige metoder for at afgøre, om et objekt i bevægelse detekteres.

Registrering af bevægelige objekter er blevet brugt til en bred vifte af applikationer som videoovervågning, aktivitetsgenkendelse, vejtilstandsovervågning, lufthavnssikkerhed, overvågning af beskyttelse langs havgrænser osv.

Bevægelse af bevægelige objekter er at genkende den fysiske bevægelse af et objekt på et givet sted eller område. [2] Ved at handle segmentering mellem bevægelige objekter og stationære områder eller områder kunne bevægelige objekters bevægelse spores og dermed kunne analyseres senere. For at opnå dette skal du overveje, at en video er en struktur, der er bygget på enkeltbilleder, detektering af bevægelige objekter er at finde det eller de foregående bevægelige mål (r) enten i hver videoramme eller kun når det bevægelige mål viser det første udseende i videoen.

Jeg vil bruge Opnecv og Python kombination til at opdage og spore objekterne baseret på farven

Trin 1: Tegn et rektangel på det genkendte objekt

Hvis din pc ikke har python eller opencv, skal du følge denne nedenstående instabilitet

her er python -koden:

import cv2import numpy som np

cap = cv2. VideoCapture (0)

mens det er sandt:

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

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

øvre_gul = np.array ([40, 255, 255])

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

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

til 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) & 0XFF

hvis k == 27: pause

cv2.destroyAllWindows ()

cap.release ()

Trin 2: Spor den sti, som objektet har bevæget sig i

for at spore stien:

for i i område (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 (ramme, center_points [i - 1], center_points , (b, g, r), 4)

Trin 3: Integrering af begge koder

Jeg vil integrere begge koder

import cv2import numpy som np import tilfældig fra samlinger import deque

cap = cv2. VideoCapture (1)

# For at holde styr på alle punkter, hvor objekt besøgte center_points = deque ()

mens det er sandt:

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

# Slør rammen lidt

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

# Konverter fra BGR til HSV farveformat

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

# Definer lavere og øvre område af hsv -farve, der skal registreres. Blå her

lavere_blå = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255]) maske = cv2.inRange (hsv, lavere_blå, øvre_blå)

# Lav elliptisk kerne

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

# Åbningsmorph (erosion efterfulgt af udvidelse)

mask = cv2.morphologyEx (maske, cv2. MORPH_OPEN, kerne)

# Find alle konturer

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

hvis len (konturer)> 0:

# Find den største kontur største_kontur = max (konturer, nøgle = cv2.contourArea)

# Find konturens centrum og tegn den fyldte cirkel

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

# Bind konturen med cirkel

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

# Gem midten af konturen, så vi tegner en linje, der sporer den

center_points.appendleft (center_of_contour)

# Tegn streg fra midtpunktet af konturen

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

cv2.imshow ('maske', maske)

k = cv2.waitKey (5) & 0xFF

hvis k == 27: pause

cv2.destroyAllWindows ()

cap.release ()

Anbefalede: