Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
Liikuva objekti tuvastamine on tehnika, mida kasutatakse arvuti nägemises ja pilditöötluses. Videost võrreldakse mitut järjestikust kaadrit erinevate meetoditega, et teha kindlaks, kas liikuvat objekti tuvastatakse.
Liikuvate objektide tuvastamist on kasutatud paljudes rakendustes, nagu videovalve, tegevuse tuvastamine, teeolukorra jälgimine, lennujaama ohutus, kaitse jälgimine merepiiril jne.
Liikuva objekti tuvastamine on objekti füüsilise liikumise tuvastamine antud kohas või piirkonnas. [2] Liikuvate objektide ja statsionaarse ala või piirkonna vahelise segmenteerimise abil saab liikuvate objektide liikumist jälgida ja seega hiljem analüüsida. Selle saavutamiseks kaaluge, et video on struktuur, mis on üles ehitatud üksikutele kaadritele. Liikuva objekti tuvastamine on esiplaanil oleva liikuva sihtmärgi leidmine kas igas videokaadris või alles siis, kui liikuv sihtmärk näitab videos esimest korda.
Kasutan Opnecvi ja Pythoni kombinatsiooni objektide tuvastamiseks ja jälgimiseks värvi alusel
Samm: ristküliku joonistamine tuvastatud objektile
kui teie arvutis pole pythonit või opencv -d, järgige seda juhendit allpool
siin on püütoni kood:
import cv2import numpy np -na
cap = cv2. VideoCapture (0)
kuigi tõsi:
_, frame = cap.read () hsv = cv2.cvtColor (raam, cv2. COLOR_BGR2HSV)
madalam_kollane = np.massiiv ([20, 110, 110])
ülemine_kollane = np.massiiv ([40, 255, 255])
kollane_mask = cv2.inRange (hsv, alumine_kollane, ülemine_kollane)
(_, kontuurid, _) = cv2.findContours (kollane_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
kontuuride jaoks kontuurides:
pindala = cv2.contourArea (kontuur)
kui (pindala> 800):
x, y, w, h = cv2.boundingRect (kontuur) raam = cv2. ristkülik (raam, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("jälgimine", raam)
k = cv2.waitKey (5) & 0XFF
kui k == 27: murda
cv2.destroyAllWindows ()
cap.release ()
2. samm: jälgige rada, kuhu objekt on liikunud
tee jälgimiseks:
i jaoks vahemikus (1, len (keskpunktid)): b = juhuslik.randint (230, 255) g = juhuslik.randint (100, 255) r = juhuslik.randint (100, 255), kui matemaatika.sqrt ((((keskpunktid [i - 1] [0] - keskpunktid [0]) ** 2) + ((keskpunktid [i - 1] [1] - keskpunktid [1]) ** 2)) <= 50: cv2.line (raam, keskpunktid [i - 1], keskpunktid , (b, g, r), 4)
Samm: mõlema koodi integreerimine
integreerin mõlemad koodid
import cv2import numpy kui np import juhuslik kogudest import deque
cap = cv2. VideoCapture (1)
# Kõigi punktide jälgimiseks, kus objekt külastas, center_points = deque ()
kuigi tõsi:
# Lugege ja pöörake raami _, raam = cap.read () raam = cv2.flip (raam, 1)
# Hägustage raami veidi
blur_frame = cv2. GaussianBlur (raam, (7, 7), 0)
# Teisenda BGR -st HSV -vormingusse
hsv = cv2.cvtColor (hägusus_raam, cv2. COLOR_BGR2HSV)
# Määratlege tuvastatava hsv -värvi alumine ja ülemine vahemik. Sinine siin
alumine_sinine = np.massiiv ([100, 50, 50]) ülemine_sinine = np.massiiv ([140, 255, 255]) mask = cv2.inRange (hsv, alumine_sinine, ülemine_sinine)
# Tehke elliptiline tuum
kernel = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Avamorf (erosioon, millele järgneb laienemine)
mask = cv2.morphologyEx (mask, cv2. MORPH_OPEN, kernel)
# Leia kõik kontuurid
kontuurid, hierarhia = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
kui len (kontuurid)> 0:
# Leia suurim kontuur suurin_contour = max (kontuurid, võti = cv2.contourArea)
# Leidke kontuuri keskpunkt ja joonistage täidetud ring
hetked = cv2.moments (suurim_kontuur) center_of_contour = (int (hetked ['m10'] / hetked ['m00']), int (hetked ['m01'] / hetked ['m00'])) cv2.circle (frame, kontuuri keskpunkt, 5, (0, 0, 255), -1)
# Siduge kontuur ringiga
ellips = cv2.fit
# Salvestage kontuuri keskpunkt, et saaksime seda jälgida
center_points.appendleft (kontuuri keskpunkt)
# Joonista joon kontuuri keskpunktidest
i jaoks vahemikus (1, len (keskpunktid)): b = juhuslik.randint (230, 255) g = juhuslik.randint (100, 255) r = juhuslik.randint (100, 255), kui matemaatika.sqrt ((((keskpunktid [i - 1] [0] - keskpunktid [0]) ** 2) + ((keskpunktid [i - 1] [1] - keskpunktid [1]) ** 2)) <= 50: cv2.line (raam, keskpunktid [i - 1], keskpunktid , (b, g, r), 4)
cv2.imshow ('originaal', raam)
cv2.imshow ('mask', mask)
k = cv2.waitKey (5) & 0xFF
kui k == 27: murda
cv2.destroyAllWindows ()
cap.release ()
Soovitan:
Objektide tuvastamine Sipeed MaiX tahvlitega (Kendryte K210): 6 sammu
Objektide tuvastamine Sipeed MaiX -tahvlitega (Kendryte K210): Jätkates oma eelmist artiklit pildituvastuse kohta Sipeed MaiX -tahvlitega, otsustasin kirjutada veel ühe õpetuse, keskendudes objektide tuvastamisele. Hiljuti ilmus Kendryte K210 kiibiga huvitav riistvara, sealhulgas S
Micro: bit MU nägemisandur - objektide jälgimine: 7 sammu
Mikro: bitine MU nägemisandur - objektide jälgimine: Nii et selles juhendis hakkame programmeerima nutikat autot, mille me selles juhendis ehitame ja et me paigaldasime selles juhendis MU nägemisanduri. Programmeerime mikro: natuke lihtsa objektide jälgimisega, nii et
Micro: bit MU nägemisandur - objektide jälgimine: 6 sammu
Micro: bit MU Vision Sensor - Objektide jälgimine: See on minu neljas juhend mikro: bit MU nägemisanduri kohta. Siin ma vaatan, kuidas mikro: bitiga objekte jälgida ja koordinaadid OLED -ekraanile kirjutada. Olen oma teistes juhendites läbi vaadanud, kuidas mikro: bit ühendada
Väikeste poodide jälgimine ja jälgimine: 9 sammu (piltidega)
Jälgi ja jälgi väikestele poodidele: see on süsteem, mis on loodud väikestele kauplustele, mis peaksid olema paigaldatud e-jalgratastele või e-motorolleritele lühikese vahemaaga kohaletoimetamiseks, näiteks pagaritöökoda, mis soovib saiakesi tarnida. Mida tähendab jälgimine ja jälgimine? Jälgimine ja jälgimine on süsteem, mida kasutavad ca
Raspberry Pi - autonoomne Mars Rover koos OpenCV objektide jälgimisega: 7 sammu (koos piltidega)
Raspberry Pi - autonoomne Mars Rover koos OpenCV objektide jälgimisega: toiteallikaks Raspberry Pi 3, avatud CV objektide tuvastamine, ultraheliandurid ja reduktoriga alalisvoolumootorid. See rover saab jälgida mis tahes objekti, mille jaoks ta on koolitatud, ja liikuda igal maastikul