Բովանդակություն:
- Քայլ 1. Reանաչված օբյեկտի վրա ուղղանկյուն նկարելը
- Քայլ 2. Բացահայտեք այն ճանապարհը, որով շարժվել է առարկան
- Քայլ 3: Երկու կոդերի ինտեգրում
Video: Opencv օբյեկտի հետևում. 3 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Շարժվող օբյեկտի հայտնաբերումը տեխնիկա է, որն օգտագործվում է համակարգչային տեսողության և պատկերի մշակման մեջ: Տեսանյութից մի քանի հաջորդական կադրեր համեմատվում են տարբեր մեթոդների միջոցով `որոշելու, թե արդյոք հայտնաբերվում է շարժվող առարկա:
Շարժվող օբյեկտների հայտնաբերումը կիրառվել է այնպիսի ծրագրերի լայն շրջանակի համար, ինչպիսիք են տեսահսկումը, գործունեության ճանաչումը, ճանապարհների վիճակի մոնիտորինգը, օդանավակայանների անվտանգությունը, ծովային սահմանի պաշտպանության վերահսկողությունը և այլն:
Շարժվող օբյեկտի հայտնաբերումը նշանակում է ճանաչել օբյեկտի ֆիզիկական տեղաշարժը տվյալ վայրում կամ տարածաշրջանում [2]: Գործելով շարժվող օբյեկտների և ստացիոնար տարածքի կամ տարածաշրջանի միջև հատվածավորումը, շարժվող օբյեկտների շարժը կարող է հետևվել և դրանով իսկ հետագայում վերլուծվել: Դրան հասնելու համար դիտեք, որ տեսահոլովակը կառուցվածք է, որը կառուցված է մեկ շրջանակի վրա: Շարժվող օբյեկտի հայտնաբերումն առաջին պլանի շարժվող թիրախ (ների) հայտնաբերումն է `յուրաքանչյուր տեսաֆիլմում կամ միայն այն ժամանակ, երբ շարժվող թիրախը ցույց է տալիս տեսանյութի առաջին տեսքը:
Ես պատրաստվում եմ օգտագործել Opnecv և Python համադրությունը `գույնի հիման վրա օբյեկտները հայտնաբերելու և հետևելու համար
Քայլ 1. Reանաչված օբյեկտի վրա ուղղանկյուն նկարելը
եթե ձեր համակարգիչը չունի python կամ opencv, հետևեք ստորև բերված անուղղելի հրահանգներին
ահա պիթոնի ծածկագիրը.
ներմուծել cv2import numpy որպես np
cap = cv2. VideoCapture (0)
իսկական True:
_, շրջանակ = cap.read () hsv = cv2.cvtColor (շրջանակ, cv2. COLOR_BGR2HSV)
ստորին_դեղին = np. զանգված ([20, 110, 110])
վերին_դեղին = np. զանգված ([40, 255, 255])
դեղին_դիմակ = cv2.inRange (hsv, lower_yellow, above_yellow)
(_, ուրվագծեր, _) = cv2.findContours (դեղին_դիմակ, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
ուրվագծերի ուրվագծի համար.
տարածք = cv2.contourArea (ուրվագիծ)
եթե (տարածք> 800):
x, y, w, h = cv2.bounding
cv2.imshow («հետևում», շրջանակ)
k = cv2.waitKey (5) & 0XFF
եթե k == 27: ընդմիջում
cv2.destroyAllWindows ()
cap.release ()
Քայլ 2. Բացահայտեք այն ճանապարհը, որով շարժվել է առարկան
ուղին հետագծելու համար.
i- ի համար միջակայքում (1, լեն (կենտրոնական_նիշեր)). b = պատահական. նշանագիր (230, 255) գ = պատահական: նշանագիր (100, 255) r = պատահական: նշան (100, 255), եթե math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (շրջանակ, կենտրոնի_կետեր [i - 1], կենտրոնի_նիշեր , (b, g, r), 4)
Քայլ 3: Երկու կոդերի ինտեգրում
Ես մտադիր եմ միացնել երկուսն էլ կոդը
ներմուծել cv2import numpy որպես np ներմուծել պատահական հավաքածուներից ներմուծման դեկեկ
cap = cv2. VideoCapture (1)
# Հետևելու բոլոր այն կետերին, որտեղ օբյեկտն այցելել է կենտրոն
իսկական True:
# Կարդալ և շրջել շրջանակ _, շրջանակ = cap.read () շրջանակ = cv2.flip (շրջանակ, 1)
# Մի փոքր պղտորեք շրջանակը
blur_frame = cv2. GaussianBlur (շրջանակ, (7, 7), 0)
# Փոխարկեք BGR- ից HSV գունային ձևաչափի
hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)
# Սահմանեք հայտնաբերելու համար hsv գույնի ստորին և վերին տիրույթը: Կապույտ այստեղ
lower_blue = np.array ([100, 50, 50]) above_blue = np.array ([140, 255, 255]) դիմակ = cv2.inRange (hsv, lower_bleue, above_blue)
# Պատրաստեք էլիպսաձև միջուկ
միջուկ = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Բացման մորֆ (էրոզիա, որին հաջորդում է ընդլայնում)
դիմակ = cv2.morphologyEx (դիմակ, cv2. MORPH_OPEN, միջուկ)
# Գտեք բոլոր ուրվագծերը
ուրվագծեր, հիերարխիա = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
եթե len (ուրվագծեր)> 0:
# Գտեք ամենամեծ ուրվագիծը ամենամեծ_կոնտուրը = առավելագույնը (ուրվագծեր, բանալին = cv2.contourArea)
# Գտեք եզրագծի կենտրոնը և նկարեք լցված շրջան
պահեր = cv2.moments (ամենամեծ_կոնտուր) centre_of_contour = (int (պահեր ['m10'] / պահեր ['m00']), int (պահեր ['m01'] / պահեր ['m00'])) cv2. շրջանակ (շրջանակ, կենտրոնի_կոնտուր, 5, (0, 0, 255), -1)
# Եզրագծը կապեք շրջանով
էլիպս = cv2.fitEllipse (ամենամեծ_կոնտուր) cv2.ellipse (շրջանակ, էլիպս, (0, 255, 255), 2)
# Պահեք եզրագծի կենտրոնը, որպեսզի գծենք այն հետևող գիծ
center_points.appendleft (centre_of_courour)
# Գծեք գծեր եզրագծի կենտրոնական կետերից
i- ի համար միջակայքում (1, լեն (կենտրոնական_նիշեր)). b = պատահական. նշանագիր (230, 255) գ = պատահական: նշանագիր (100, 255) r = պատահական: նշան (100, 255), եթե math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (շրջանակ, կենտրոնի_կետեր [i - 1], կենտրոնի_նիշեր , (b, g, r), 4)
cv2.imshow («օրիգինալ», շրջանակ)
cv2.imshow («դիմակ», դիմակ)
k = cv2.waitKey (5) & 0xFF
եթե k == 27: ընդմիջում
cv2.destroyAllWindows ()
cap.release ()
Խորհուրդ ենք տալիս:
Օբյեկտի հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210) ՝ 6 քայլ
Օբյեկտների հայտնաբերում Sipeed MaiX տախտակներով (Kendryte K210). Որպես Sipeed MaiX տախտակներով պատկերի ճանաչման մասին իմ նախորդ հոդվածի շարունակություն, ես որոշեցի գրել մեկ այլ ձեռնարկ ՝ կենտրոնանալով օբյեկտների հայտնաբերման վրա: Վերջերս ինչ -որ հետաքրքիր սարքավորում հայտնվեց Kendryte K210 չիպով, ներառյալ S
Հեռակա օբյեկտի ցուցիչ Arduino- ի միջոցով. 7 քայլ
Arduino- ի օգտագործմամբ հեռավոր օբյեկտների սենսոր. Մեր օրերում արտադրողները, ծրագրավորողները նախընտրում են Arduino- ն `նախագծերի նախատիպերի արագ զարգացման համար: Arduino- ն բաց կոդով էլեկտրոնիկայի հարթակ է, որը հիմնված է հեշտ օգտագործման ապարատային և ծրագրային ապահովման վրա: Arduino- ն ունի շատ լավ օգտագործողների համայնք: Սրանում
Միկրո ՝ բիթ MU Vision Sensor - օբյեկտի հետևում ՝ 7 քայլ
Micro. մի քանի օբյեկտի պարզ հետևում, այնպես որ
Գույնի հայտնաբերման վրա հիմնված օբյեկտի հետևում. 10 քայլ
Գույնի հայտնաբերման վրա հիմնված օբյեկտի հետևում. Պատմություն Այս նախագիծը ես արեցի ՝ սովորելու համար պատկերի մշակումը `օգտագործելով ազնվամորի PI և բաց CV: Այս նախագիծը ավելի հետաքրքիր դարձնելու համար ես օգտագործեցի երկու SG90 Servo շարժիչ և դրա վրա տեղադրեցի տեսախցիկ: Մեկ շարժիչն օգտագործվում էր հորիզոնական տեղաշարժվելու համար, իսկ երկրորդը ՝ ուղղահայաց
Օբյեկտի հայտնաբերում W/ Dragonboard 410c կամ 820c OpenCV- ի և Tensorflow- ի միջոցով. 4 քայլ
Օբյեկտի հայտնաբերում W/ Dragonboard 410c կամ 820c OpenCV- ի և Tensorflow- ի միջոցով. Այս հրահանգները նկարագրում են, թե ինչպես տեղադրել OpenCV, Tensorflow և մեքենայական ուսուցման շրջանակներ Python 3.5 – ի համար ՝ օբյեկտների հայտնաբերման ծրագիրը գործարկելու համար: