Orodha ya maudhui:

Ufuatiliaji wa Kitu cha Opencv: Hatua 3
Ufuatiliaji wa Kitu cha Opencv: Hatua 3

Video: Ufuatiliaji wa Kitu cha Opencv: Hatua 3

Video: Ufuatiliaji wa Kitu cha Opencv: Hatua 3
Video: UKIZIONA DALILI HIZI MAMA MJAMZITO BASI UTAJIFUNGUA MTOTO WA KIUME 2024, Novemba
Anonim
Ufuatiliaji wa Kitu cha Opencv
Ufuatiliaji wa Kitu cha Opencv

Kusonga kugundua kitu ni mbinu inayotumiwa katika maono ya kompyuta na usindikaji wa picha. Muafaka anuwai mfululizo kutoka kwa video unalinganishwa na njia anuwai kuamua ikiwa kitu chochote cha kusonga kinapatikana.

Kugundua vitu vya kusonga imetumika kwa anuwai ya programu kama ufuatiliaji wa video, utambuzi wa shughuli, ufuatiliaji wa hali ya barabara, usalama wa uwanja wa ndege, ufuatiliaji wa ulinzi kando ya mpaka wa baharini na nk.

Kusonga kugundua kitu ni kutambua mwendo wa mwili wa kitu mahali au eneo fulani. [2] Kwa kugawanya sehemu kati ya vitu vinavyohamia na eneo lililosimama au mkoa, mwendo wa vitu vinavyohamia unaweza kufuatiliwa na kwa hivyo inaweza kuchambuliwa baadaye. Ili kufanikisha hili, fikiria video ni muundo uliojengwa juu ya fremu moja, kugundua kitu ni kupata shabaha ya kusonga mbele, iwe katika kila fremu ya video au tu wakati shabaha inapoonekana mwonekano wa kwanza kwenye video.

Nitatumia mchanganyiko wa Opnecv na Python kugundua na kufuatilia vitu kulingana na rangi

Hatua ya 1: Kuchora Mstatili juu ya Kitu Kinachotambuliwa

ikiwa pc yako haina chatu au opencv tafadhali fuata hii hapa chini isiyowezekana

hapa nambari ya chatu:

kuagiza cv2import numpy kama np

cap = cv2. Ukamataji wa Video (0)

wakati Kweli:

_, fremu = cap.read () hsv = cv2.cvt Rangi (fremu, cv2. COLOR_BGR2HSV)

chini_yellow = np.raray ([20, 110, 110])

njano_ya juu = np.raray ([40, 255, 255])

manjano_mask = cv2.in Masafa (hsv, chini_yellow, juu_yellow)

(_, mtaro, _) = cv2.findContours (manjano_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

kwa contour katika mtaro:

eneo = cv2.contourArea (contour)

ikiwa (eneo> 800):

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

cv2.imshow ("ufuatiliaji", fremu)

k = cv2.waitKey (5) na 0XFF

ikiwa k == 27: kuvunja

cv2.destroyAll Windows ()

cap. tafadhali ()

Hatua ya 2: Tafuta Njia ambayo kitu kimetembea

kufuatilia njia:

kwa i katika anuwai (1, len (kituo_point)): b = nasibu.sanduku (230, 255) g = nasibu.sanduku (100, 255) r = nasibu.randint (100, 255) ikiwa math.sqrt ((((vituo_ vya katikati [i - 1] [0] - vituo vya katikati [0]) ** 2) + ((vituo vya katikati [i - 1] [1] - vituo vya katikati [1]) ** 2)) <= 50: cv2.line (fremu, vituo vya katikati [i - 1], vituo vya katikati , (b, g, r), 4)

Hatua ya 3: Kuunganisha Nambari zote mbili

nitaunganisha nambari zote mbili

kuagiza cv2import numpy kama np kuagiza nasibu kutoka kwa makusanyo kuagiza deque

cap = cv2. Ukamataji wa Video (1)

# Kufuatilia kila mahali ambapo kitu kilitembelewa center_points = deque ()

wakati Kweli:

# Soma na uweke fremu _, fremu = cap. Soma () fremu = cv2.flip (fremu, 1)

# Blur sura kidogo

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

# Badilisha kutoka kwa BGR hadi muundo wa rangi ya HSV

hsv = cv2.cvt Rangi (blur_frame, cv2. COLOR_BGR2HSV)

# Fafanua anuwai ya chini na ya juu ya rangi ya hsv kugundua. Bluu hapa

chini_blue = np.raray ([100, 50, 50]) juu_blue = np.array ([140, 255, 255]) mask = cv2.in

# Tengeneza punje ya mviringo

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

# Kufungua morph (mmomomyoko ikifuatiwa na upanuzi)

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

# Pata mtaro wote

mtaro, safu ya uongozi = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [- 2:]

ikiwa len (mtaro)> 0:

# Pata mtaro mkubwa zaidi_contour = max (mtaro, ufunguo = cv2.contourArea)

# Tafuta kituo cha mtaro na chora duara iliyojazwa

muda = cv2.moments (great_contour) centre_of_contour = (int (moments ['m10'] / moments ['m00']), int (moments ['m01'] / moments ['m00'])) cv2.circle (fremu, kituo_cha_mtaa, 5, (0, 0, 255), -1)

# Funga contour na duara

ellipse = cv2.fitEllipse (kubwa_contour) cv2.ellipse (fremu, ellipse, (0, 255, 255), 2)

# Okoa kitovu cha contour kwa hivyo tunachora mstari kuifuatilia

vituo vya kituo.appendleft (centre_of_contour)

# Chora mstari kutoka sehemu za katikati za contour

kwa i katika anuwai (1, len (vituo vya katikati)): b = nasibu.sanduku (230, 255) g = nasibu.randint (100, 255) r = nasibu.randint (100, 255) ikiwa math.sqrt ((((vituo_ vya katikati [i - 1] [0] - vituo vya katikati [0]) ** 2) + ((vituo vya katikati [i - 1] [1] - vituo vya katikati [1]) ** 2)) <= 50: cv2.line (fremu, vituo vya katikati [i - 1], vituo vya katikati , (b, g, r), 4)

cv2.imshow ('asilia', fremu)

cv2.imshow ('mask', kinyago)

k = cv2.waitKey (5) na 0xFF

ikiwa k == 27: kuvunja

cv2.destroyAll Windows ()

cap. tafadhali ()

Ilipendekeza: