Përmbajtje:

Ndjekja e objekteve të hapura: 3 hapa
Ndjekja e objekteve të hapura: 3 hapa

Video: Ndjekja e objekteve të hapura: 3 hapa

Video: Ndjekja e objekteve të hapura: 3 hapa
Video: День Стройки #Лайфхак #Ким #свс Азы Новичкам база знаний #theants Underground Kingdom 2024, Nëntor
Anonim
Ndjekja e objekteve të hapura
Ndjekja e objekteve të hapura

Zbulimi i objekteve në lëvizje është një teknikë e përdorur në vizionin kompjuterik dhe përpunimin e imazhit. Korniza të shumta të njëpasnjëshme nga një video krahasohen me metoda të ndryshme për të përcaktuar nëse zbulohet ndonjë objekt në lëvizje.

Zbulimi i objekteve në lëvizje është përdorur për një gamë të gjerë aplikimesh si mbikëqyrje video, njohja e aktivitetit, monitorimi i gjendjes së rrugës, siguria e aeroportit, monitorimi i mbrojtjes përgjatë kufirit detar etj.

Zbulimi i objekteve lëvizëse është njohja e lëvizjes fizike të një objekti në një vend ose rajon të caktuar. [2] Duke vepruar segmentimin midis objekteve në lëvizje dhe zonës ose rajonit të palëvizshëm, lëvizja e objekteve në lëvizje mund të gjurmohet dhe kështu mund të analizohet më vonë. Për ta arritur këtë, konsideroni që një video është një strukturë e ndërtuar mbi korniza të vetme, zbulimi i objektit në lëvizje është gjetja e objektivit (ve) lëvizës në plan të parë, ose në secilën kornizë video ose vetëm kur objektivi lëvizës shfaq pamjen e parë në video.

Unë do të përdor kombinimin Opnecv dhe Python për të zbuluar dhe ndjekur objektet bazuar në ngjyrën

Hapi 1: Vizatimi i një drejtkëndëshi mbi objektin e njohur

nëse kompjuteri juaj nuk ka python ose opencv ju lutemi ndiqni këtë udhëzues më poshtë

këtu është kodi python:

import cv2import numpy si np

cap = cv2. VideoCapture (0)

ndërsa e vërtetë:

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

më e ulët_e verdhë = np. varg ([20, 110, 110])

e verdha e sipërme = np. varg ([40, 255, 255])

maskë e verdhë = cv2.inRange (hsv, e poshtme_e verdhë, e sipërme -e verdhë)

(_, konturet, _) = cv2.findContours (maskë e verdhë, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

për konturin në konturet:

zona = cv2.contourArea (kontur)

nëse (zona> 800):

x, y, w, h = cv2.boundingRect (contour) frame = cv2.rekëndësh (kornizë, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow ("gjurmimi", kornizë)

k = cv2.waitKey (5) & 0XFF

nëse k == 27: pushim

cv2.destroyAllWindows ()

kapak. lëshim ()

Hapi 2: Gjeni rrugën në të cilën objekti është zhvendosur

për të gjetur rrugën:

për i në rang (1, len (pikat_qendra)): b = rastësore.randint (230, 255) g = rastësore.randint (100, 255) r = të rastësishme.randint (100, 255) nëse math.sqrt ((((pikat_qendrore [i - 1] [0] - pikat e qendrës [0]) ** 2) + ((pikat_qendra [i - 1] [1] - pikat e qendrës [1]) ** 2)) <= 50: cv2.line (korniza, pikat qendrore [i - 1], pikat qendrore , (b, g, r), 4)

Hapi 3: Integrimi i të dy Kodeve

Unë do të integroj të dy kodet

import cv2import numpy si np importim i rastësishëm nga koleksionet deque import

kap = cv2. VideoCapture (1)

# Për të mbajtur gjurmët e të gjitha pikave ku objekti vizitoi center_points = deque ()

ndërsa e vërtetë:

# Lexoni dhe rrokullisni kornizën _, frame = cap.read () frame = cv2.flip (frame, 1)

# Mjegulloni pak kornizën

blur_frame = cv2. Gaussian Blur (kornizë, (7, 7), 0)

# Konvertoni nga BGR në formatin e ngjyrave HSV

hsv = cv2.cvtColor (korniza e turbullt, cv2. COLOR_BGR2HSV)

# Përcaktoni gamën e poshtme dhe të sipërme të ngjyrës hsv për t'u zbuluar. Blu këtu

më e ulët_blue = np.rray ([100, 50, 50]) blue_blue = np.array ([140, 255, 255]) mask = cv2.inRange (hsv, blu_ e ulët, blu_ e lartë)

# Bëni kernel eliptik

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

# Morf i hapjes (erozioni i ndjekur nga zgjerimi)

maskë = cv2.morphologyEx (maskë, cv2. MORPH_OPEN, kernel)

# Gjeni të gjitha konturet

konturet, hierarkia = cv2.findContours (mask.kopje (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]

nëse len (konturet)> 0:

# Gjeni konturin më të madh_kontur i madh = max (konturet, çelësi = cv2.contourArea)

# Gjeni qendrën e konturit dhe vizatoni rrethin e mbushur

momentet = cv2.moments (konturi më i madh) centre_of_contour = (int (momentet ['m10'] / momentet ['m00']), int (momentet ['m01'] / momentet ['m00'])) cv2.rreth (kornizë, qendra e_konturit, 5, (0, 0, 255), -1)

# Lidheni konturin me rreth

elips = cv2.fitEllips (konturi_më i madh) cv2.ellipse (kornizë, elips, (0, 255, 255), 2)

# Ruani qendrën e konturit kështu që ne tërheqim vijën duke e ndjekur atë

qendrat_pikat.appendleft (centre_of_contour)

# Vizatoni vijën nga pikat qendrore të konturit

për i në rang (1, len (pikat_qendra)): b = rastësore.randint (230, 255) g = rastësore.randint (100, 255) r = të rastësishme.randint (100, 255) nëse math.sqrt ((((pikat qendrore [i - 1] [0] - pikat qendrore [0]) ** 2) + ((pikat_qendra [i - 1] [1] - pikat qendrore [1]) ** 2)) <= 50: cv2.line (korniza, pikat qendrore [i - 1], pikat qendrore , (b, g, r), 4)

cv2.imshow ('origjinal', kornizë)

cv2.imshow ('maskë', maskë)

k = cv2.waitKey (5) & 0xFF

nëse k == 27: pushim

cv2.destroyAllWindows ()

kapak. lëshim ()

Recommended: