Բովանդակություն:

Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով. 6 քայլ
Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով. 6 քայլ

Video: Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով. 6 քայլ

Video: Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով. 6 քայլ
Video: ՈՐՔԱ՞Ն ԽԵԼԱՑԻ ԵՍ Պարզ ԹԵՍՏ, որ չեն անցնի շատ մեծահասակներ 2024, Հունիսի
Anonim
Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով
Պարզ գույնի հայտնաբերում OpenCV- ի միջոցով

Ողջու՜յն! Այսօր ես ցույց կտամ OpenCV- ի և python- ի միջոցով կենդանի տեսանյութից գույնը հայտնաբերելու մի պարզ մեթոդ:

Հիմնականում ես պարզապես կփորձեմ պահանջվող գույնի առկայությունը ֆոնային շրջանակում, թե ոչ, և OpenCV մոդուլների օգնությամբ ես կքողարկեմ այդ շրջանը և միաժամանակ կցուցադրեմ շրջանակը:

Քայլ 1: Վերնագրի ֆայլեր

Վերնագրի ֆայլեր
Վերնագրի ֆայլեր

Այժմ այստեղ ես օգտագործել եմ երկու վերնագրի ֆայլ ՝ cv2 և NumPy: Հիմնականում cv2- ը OpenCV գրադարանն է, որը բեռնում է բոլոր c ++ ֆայլերը, որոնք կարևոր են ծածկագրերի հրամանները օգտագործելիս (այն պարունակում է բոլոր սահմանումները):

Իսկ Numpy- ն պիթոնի գրադարան է, որն էական է բազմաչափ զանգվածը պահելու համար: Մենք կօգտագործենք մեր գունային տիրույթի կոորդինատները պահելու համար:

Եվ numpy as np- ն հիմնականում օգնում է մեր ծածկագրին մի փոքր կարճացնել ՝ ամեն անգամ np- ի փոխարեն np օգտագործելով:

Քայլ 2: Տեսանյութի նկարահանում

Տեսանյութի նկարահանում
Տեսանյութի նկարահանում

Սա բավականին պարզ է ՝ պիթոն օգտագործելիս: Այստեղ մենք պարզապես պետք է միացնենք տեսաձայնագրիչը, որպեսզի այն սկսի նկարահանել շրջանակները:

Այժմ VideoCapture- ի ներսում արժեքը ցույց է տալիս տեսախցիկը, իմ դեպքում տեսախցիկը միացված է նոութբուքիս, այնպես որ 0:

Երկրորդային տեսախցիկի համար կարող եք գնալ 1 -ի նման և այլն: VideoCapture- ը դրա համար ստեղծում է օբյեկտ:

Քայլ 3: Շրջանակի գրավում և գույնի որոշում

Շրջանակի գրավում և գույնի սահմանում
Շրջանակի գրավում և գույնի սահմանում

Այժմ այստեղ մենք պետք է ինչ -որ բան անենք, որպեսզի կարողանանք ֆիքսել տեսանյութի ակնթարթային շրջանակը, որը կօգնի մեզ արդյունահանել պատկերը, և մենք կարող ենք դրա վրա աշխատել ըստ պահանջի:

«while» օղակը կօգնի մեզ օղակը հասցնել մեր պահանջվող ժամանակին: Այժմ «_, frame = cap.read ()» - ը օգտագործվում է գրավված Շրջանակի վավերականությունը ստուգելու և այն պահելու համար: «cap.read () - ը բուլյան փոփոխական է և վերադարձնում է true, եթե շրջանակը ճիշտ է կարդացվում, և եթե շրջանակներ չստանաք, այն սխալ չի ցույց տա, պարզապես կստանաք Ոչ մեկը:

Այժմ տող 11 -ը և տողը 12 -ը հիմնականում սահմանում են այն գույնի շրջանակը, որը մենք պետք է հայտնաբերենք: Դրա համար ես սովոր էի կապույտ գույնին:

Կարող եք շարունակել ցանկացած գույնով, դրա համար անհրաժեշտ է պարզապես մուտքագրել BGR արժեքները տվյալ գույնի համար: Ավելի լավ է սահմանել երկու զանգված ՝ օգտագործելով անլար զանգվածները, քանի որ իրական աշխարհում որոշակի գույնի հայտնաբերումը չի ծառայի մեր նպատակին, այլ մենք կսահմանենք կապույտ գույնի մի շարք, որպեսզի այն հայտնաբերվի տիրույթի սահմաններում:

Դրա համար ես սահմանել եմ երկու փոփոխական ՝ պահպանելով ստորին BGR և վերին BGR արժեքները:

Քայլ 4: Դիմակավորում և արդյունահանում

Դիմակավորում և արդյունահանում
Դիմակավորում և արդյունահանում

Այժմ այստեղ գալիս է շրջանակը դիմակավորելու և շրջանակի գույնը հանելու հիմնական խնդիրը: Դիմակավորումը կատարելու համար ես օգտագործեցի OpenCV- ում գրադարանում առկա կանխորոշված հրամանները: Հիմնականում դիմակավորումը շրջանակի որոշ հատվածը հեռացնելու գործընթացն է, այսինքն ՝ մենք կհեռացնենք պիքսելները, որոնց գույնի BGR արժեքները, որոնք չեն ընկած սահմանված գույնի տիրույթում, և դա արվում է cv2.inRange- ով: Դրանից հետո, մենք դիմակավորված պատկերի վրա կիրառում ենք գունային տիրույթը `կախված պիքսելային արժեքներից և դրա համար կօգտագործենք cv2.bitwise_and. Այն պարզապես գույները կնշանակի դիմակավորված տարածքին` կախված դիմակի և գույնի տիրույթի արժեքներից:

Հղում cv2- ի համար: bitwise_and:

Քայլ 5: Վերջապես ցուցադրվում:

Վերջապես ցուցադրվում!
Վերջապես ցուցադրվում!

Այստեղ ես օգտագործել եմ հիմնական cv2.imshow () - ը ՝ յուրաքանչյուր շրջանակի համար որպես պատկեր ցուցադրելու համար: Քանի որ ես ունեմ փոփոխականների մեջ պահված շրջանակի տվյալները, ես կարող եմ դրանք վերականգնել imshow- ում (): Այստեղ ես ցուցադրել եմ բոլոր երեք շրջանակները ՝ օրիգինալ, դիմակավորված և գունավոր:

Այժմ մենք պետք է դուրս գանք while օղակից: Դրա համար մենք կարող ենք պարզապես ներդնել cv2.wait. Key (): Հիմնականում այն պատմում է սպասման ժամանակը ՝ նախքան պատասխանելը: Այսպիսով, եթե անցնեք 0 -ը, այն կսպասի անվերջ, և 0xFF- ն կասի, որ ճարտարապետությունը 64 բիթ է: «ord ()» - ը սահմանում է այն նիշը, որը սեղմելիս կկատարի if բլոկի break հրամանը և այն դուրս կգա օղակից:

Այնուհետև cap.release () - ը փակում է տեսաձայնագրիչը, իսկ cv2.destroyAllWindows () - ը փակում է բոլոր բացված պատուհանները:

Եթե որևէ խնդիր ունեք, խնդրում եմ ինձ տեղյակ պահեք:

Հղում դեպի աղբյուրի կոդ ՝

Խորհուրդ ենք տալիս: