Talaan ng mga Nilalaman:

Pagsubaybay sa Opencv na Bagay: 3 Mga Hakbang
Pagsubaybay sa Opencv na Bagay: 3 Mga Hakbang

Video: Pagsubaybay sa Opencv na Bagay: 3 Mga Hakbang

Video: Pagsubaybay sa Opencv na Bagay: 3 Mga Hakbang
Video: Pagganyak na Gawain para sa Demo Teaching 2024, Nobyembre
Anonim
Pagsubaybay sa Opencv na Bagay
Pagsubaybay sa Opencv na Bagay

Ang paglipat ng pagtuklas ng bagay ay isang pamamaraan na ginamit sa paningin ng computer at pagproseso ng imahe. Ang maramihang magkakasunod na mga frame mula sa isang video ay inihambing ng iba't ibang mga pamamaraan upang matukoy kung may makitang anumang gumagalaw na bagay.

Ginamit ang paglipat ng mga object ng object para sa malawak na hanay ng mga application tulad ng pagsubaybay sa video, pagkilala sa aktibidad, pagsubaybay sa kondisyon ng kalsada, kaligtasan sa paliparan, pagsubaybay sa proteksyon kasama ang hangganan ng dagat at iba pa.

Ang paggalaw ng pagtuklas ng bagay ay kilalanin ang pisikal na paggalaw ng isang bagay sa isang naibigay na lugar o rehiyon. [2] Sa pamamagitan ng pag-arte ng paghihiwalay sa mga gumagalaw na bagay at nakatigil na lugar o rehiyon, ang paggalaw ng mga gumagalaw na bagay ay maaaring subaybayan at sa gayon ay masuri sa paglaon. Upang makamit ito, isaalang-alang ang isang video ay isang istrakturang itinayo sa mga solong frame, ang paglipat ng deteksyon ng bagay ay upang mahanap ang (mga) target sa paglipat ng harapan, alinman sa bawat frame ng video o kapag ipinakita lamang ng gumagalaw na target ang unang hitsura ng video.

Gagamitin ko ang kombinasyon ng Opnecv at Python upang makita at subaybayan ang mga bagay batay sa kulay

Hakbang 1: Pagguhit ng isang Parihaba sa Kinikilalang Bagay

kung ang iyong pc ay walang sawa o opencv mangyaring sundin ito sa ibaba insstructables

narito ang code ng sawa:

i-import ang cv2import numpy bilang np

cap = cv2. VideoCapture (0)

habang Totoo:

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

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

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

yellow_mask = cv2.inRange (hsv, lower_yellow, upper_yellow)

(_, contours, _) = cv2.findContours (dilaw_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

para sa tabas sa mga contour:

lugar = cv2.contourArea (tabas)

kung (lugar> 800):

x, y, w, h = cv2.boundingRect (contour) frame = cv2.rectangle (frame, (x, y), (x + w, y + h), (0, 0, 255), 10)

cv2.imshow ("pagsubaybay", frame)

k = cv2.waitKey (5) & 0XFF

kung k == 27: masira

cv2.destroyAllWindows ()

cap.release ()

Hakbang 2: Subaybayan ang Landas kung saan Inilipat ng Bagay ang Bagay

upang subaybayan ang landas:

para sa ako sa saklaw (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) kung 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)

Hakbang 3: Pagsasama ng Parehong mga Code

isasama ko ang parehong code

i-import ang cv2import numpy bilang np pag-import ng random mula sa mga koleksyon import deque

cap = cv2. VideoCapture (1)

# Upang subaybayan ang lahat ng punto kung saan binisita ng object ang center_points = deque ()

habang Totoo:

# Basahin at i-flip ang frame _, frame = cap.read () frame = cv2.flip (frame, 1)

# Blur ng kaunti ang frame

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

# I-convert mula sa BGR sa format ng kulay na HSV

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

# Tukuyin ang mas mababa at itaas na saklaw ng kulay ng hsv upang makita. Blue dito

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

# Gumawa ng elliptical kernel

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

# Pagbubukas ng morph (pagguho ng lupa kasunod ang pagluwang)

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

# Hanapin ang lahat ng mga contour

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

kung len (contours)> 0:

# Hanapin ang pinakamalaking contour pinakamalaking_contour = max (contours, key = cv2.contourArea)

# Humanap ng gitna ng tabas at iguhit ang napunan na bilog

sandali = cv2.moments (pinakamalaking_contour) centre_of_contour = (int (sandali ['m10'] / sandali ['m00']), int (sandali ['m01'] / sandali ['m00'])) cv2.circle (frame, centre_of_contour, 5, (0, 0, 255), -1)

# Bound ang contour ng bilog

ellipse = cv2.fitEllipse (pinakamalaking_contour) cv2.ellipse (frame, ellipse, (0, 255, 255), 2)

# I-save ang gitna ng tabas upang iguhit namin ang pagsubaybay sa linya nito

center_points.appendleft (centre_of_contour)

# Gumuhit ng linya mula sa mga puntong punto ng tabas

para sa ako sa saklaw (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) kung 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 ('orihinal', frame)

cv2.imshow ('mask', mask)

k = cv2.waitKey (5) & 0xFF

kung k == 27: masira

cv2.destroyAllWindows ()

cap.release ()

Inirerekumendang: