Satura rādītājs:

OpenCV pamatprojekti: 5 soļi
OpenCV pamatprojekti: 5 soļi

Video: OpenCV pamatprojekti: 5 soļi

Video: OpenCV pamatprojekti: 5 soļi
Video: Golang vs Python #shorts tiktok hackmymozg 2024, Jūlijs
Anonim
OpenCV pamata projekti
OpenCV pamata projekti

Šajā projektā mēs izpētām dažas OpenCV pamatfunkcijas, izmantojot 4 vienkāršus projektus, kas ietver tiešraides video straumi. Tie ir sejas atpazīšana, fona noņemšana, īpaša malu vizuāla atveidošana un izplūšanas efekta pielietošana tiešraides video straumē. Mans galvenais mērķis, izmēģinot šos projektus, bija vienkārši saslapināt kājas, izmantojot OpenCV saskarni, jo es plānoju iedziļināties datoru redzamības jomā.

Piegādes

  • Dators, kurā darbojas Python
  • Atvērt CV bibliotēku, Numpy bibliotēku, tkinter bibliotēku, sys bibliotēku
  • Kamera, lai izveidotu savienojumu ar datoru (ja datorā tas vēl nav iekļauts)
  • Programmas python fails (iekļauts šajā pamācībā)
  • haarcascade xml fails (iekļauts šajā pamācībā)

1. darbība. FaceDetect funkcija

FaceDetect funkcija
FaceDetect funkcija
FaceDetect funkcija
FaceDetect funkcija

Šī funkcija parāda jūsu kameras video ar zaļiem kvadrātiem uz visām sejām, ko tā uztver. Kodā mēs izmantojam funkciju cv2. VideoCapture (), lai saglabātu mūsu uzņemto video objektā ar nosaukumu "uztveršana". CAPTURE_INDEX ir datora iestatīts skaitlis, kas atbilst jūsu kameras indeksam datora video ievades sarakstā. Ja datoram nav pievienota ārējā kamera, 0 vai 1 vajadzētu darboties.

Face_cascade objekts tiek inicializēts, izmantojot funkciju cascadeClassifier un failu "haarcascade_frontalface_default.xml", kas atrodams OpenCV github. Mēs izmantojam šo objektu, lai saglabātu sejas, kas atklātas sarakstā "sejas", kā ierakstu četrvirzienu karte, kas satur sejas x koordinātu, y koordinātu, platumu un augstumu. Pēc tam, izmantojot funkciju cv2.rectangle, mēs uzzīmējam taisnstūri, kas lieliski aptver seju

No šī video OpenCV tver daudzus attēlus mūsu cilpā, izmantojot capture.read () un saglabājot attēlu rāmī, ko nosaucām par "img". Pēc tam katrs attēls tiek interpretēts un pārveidots, kā mēs vēlamies. Vietnei faceDetect mēs padarām attēlu pelēku, izmantojot funkciju cvtColor, kas pārvērš visu pirmajā parametrā doto attēlu konkrētā attēla krāsu veidā, kas norādīts otrajā parametrā. Otrā parametra pieņemamo vērtību sarakstu var atrast tiešsaistē. Pēc tam mēs parādām attēlu logā ar nosaukumu "Sejas noteikšana", izmantojot funkciju imshow (), kas ņem virkni loga nosaukumam un attēla rāmim.

Visbeidzot, mēs gaidām, kamēr lietotājs ievadīs taustiņu q, izmantojot funkciju cv2.waitKey (). Maska 0xFF tiek izmantota 64 bitu datoriem. Pēc tam, kad lietotājs ir pabeidzis video straumi, funkcija faceDetect atbrīvo uzņemšanas objektu un pēc tam iznīcina visus citus logus, kas atvērti zem OpenCV saskarnes. Visas pārējās funkcijas ievēro līdzīgu dizaina struktūru.

2. darbība. Fona noņemšanas funkcija

Fona noņemšanas funkcija
Fona noņemšanas funkcija
Fona noņemšanas funkcija
Fona noņemšanas funkcija

Šī funkcija mēģina noņemt mūsu video fona daļu un atstāt tikai priekšplāna attēlu. Dažās kamerās tas var nedarboties, jo tajās tiek izmantota apgaismojuma regulēšanas funkcija, kas tiek aktivizēta, kad rāmī iekļūstot dažādiem objektiem/ fokusiem. Ja jūsu backgroundRemove funkcija nedarbojas, nesatraucieties- tā varētu būt tikai jūsu kamera!

Lai izmantotu šo funkciju, atkāpieties no kameras rāmja un nospiediet taustiņu "d", lai uzņemtu fona attēlu. Ir svarīgi, lai fonā nebūtu kustīgu objektu, kurus vēlaties uzņemt. Pēc tam mēs varam atgriezties kameras rāmī. Ja funkcija darbojās, lietotājam vajadzētu redzēt sevi tikai funkcijas video straumē. Jebkurš troksnis/melni plankumi priekšplāna attēlā var būt saistīti ar kameras apgaismojuma pielāgošanu. Lai uzņemtu citu fonu, nospiediet taustiņu "r", lai atkārtoti inicializētu, pēc tam vēlreiz nospiediet "d".

Dažas galvenās šīs funkcijas atņemšanas iespējas ir “karoga” Būla vērtība, kas tiek pacelta uzreiz, kad lietotājs nospiež pogu d. Tas uzņem fonu un ļauj mums to noņemt no videoklipa, ko straumē šī funkcija. Mūsu mērķis ir saglabāt fona attēlu ref_img, lai mēs varētu to atšķirt no priekšplāna attēla, kas fiksē jebkuru kustīgu objektu. Mēs izmantojam funkciju cv2.subtract (), lai atņemtu priekšējo attēlu no fona attēla un otrādi, pēc tam uzreiz pēc tam atceltu visas niecīgās atšķirības abos attēlos. Fons ir aptumšots.

Fgmaska tiek veidota, izmantojot atšķirību starp šiem diviem attēliem, un pēc tam tiek piemērota funkciju video straumei, izmantojot funkciju OpenCV cv2.bitwise_and ().

3. darbība. VideoEdges funkcija

VideoEdges funkcija
VideoEdges funkcija
VideoEdges funkcija
VideoEdges funkcija

Šī funkcija atgriež mūsu tiešraides video straumi, bet nosakāmās malas tiek padarītas baltas, bet viss pārējais ir aptumšots. Šo funkciju atšķir no citām funkcijām mūsu sākotnējā video pārveidošana no RBG formāta uz HSV, kas apzīmē nokrāsu, piesātinājumu un variācijas- atšķirīgu gaismas un krāsu apstrādes metodi no video. Izmantojot šo metodi, mēs varam vieglāk atšķirt kontūras videoklipā, piemērojot filtru (red_low to red_high).

Canny Edge Detection tiek izmantota, lai noteiktu attēla malas. Tas pieņem pelēkas skalas attēlu kā ievadi un izmanto daudzpakāpju algoritmu.

4. solis: VideoBlur funkcija

VideoBlur funkcija
VideoBlur funkcija
VideoBlur funkcija
VideoBlur funkcija

Šo funkciju izmanto, lai mūsu video straumei pievienotu izplūdušu efektu. Funkcija vienkārša uz mūsu rāmja izsauc funkciju GaussianBlur cv2. Plašāku informāciju par funkciju gaussianBlur varat atrast šeit:

opencv-python-tutroals.readthedocs.io/en/l…

5. solis: uzlabojumi

Visjutīgākā funkcija šajā projektā ir fona noņemšanas funkcija, jo tai ir jāizmanto kamera, kurai nav apgaismojuma regulēšanas funkcijas. OpenCV bibliotēkā var būt labāks funkciju kopums, kas var ņemt vērā šo apgaismojuma pielāgošanu un vienmērīgi noņemt fonu (līdzīgi zaļam ekrānam).

Mēs varētu izmantot arī citas sejas noteikšanas funkcijas, kas var radīt objektus ar lielāku funkcionalitāti, izņemot tikai (x, y) koordinātu atgriešanu. Varbūt sejas atpazīšanas programmu ar spēju atcerēties sejas nebūtu pārāk grūti īstenot.

Izplūšanas funkciju var vairāk pielāgot, izmantojot lietotāja intuitīvu vadību. Piemēram, lietotājs var vēlēties pielāgot izplūšanas efekta intensitāti vai atlasīt konkrētu kadra apgabalu, lai aizmiglotu.

Ieteicams: