Innholdsfortegnelse:

OpenCV Basic Projects: 5 trinn
OpenCV Basic Projects: 5 trinn

Video: OpenCV Basic Projects: 5 trinn

Video: OpenCV Basic Projects: 5 trinn
Video: Joining Multiple Images to Display [5] | OpenCV Python Tutorials for Beginners 2024, November
Anonim
OpenCV Basic Projects
OpenCV Basic Projects

I dette prosjektet utforsker vi noen grunnleggende OpenCV -funksjonalitet gjennom 4 enkle prosjekter som involverer en live videostrøm. Disse er ansiktsgjenkjenning, fjerning av bakgrunn, spesiell visuell gjengivelse av kanter og påføring av en uskarphet effekt på den levende videostrømmen. Hovedformålet mitt med å prøve disse prosjektene var å bare få føttene mine våte med OpenCV -grensesnittet, ettersom jeg planlegger å dykke dypere innen datasyn

Rekvisita

  • Datamaskin som kjører Python
  • Åpent CV -bibliotek, Numpy bibliotek, tkinter bibliotek, sys bibliotek
  • Kamera for tilkobling til datamaskin (hvis datamaskinen ikke allerede har et)
  • Programmets python -fil (inkludert i denne instruksjonsboken)
  • haarcascade xml -fil (inkludert i denne instruksjonsboken)

Trinn 1: FaceDetect -funksjon

FaceDetect -funksjon
FaceDetect -funksjon
FaceDetect -funksjon
FaceDetect -funksjon

Denne funksjonen viser kameraets video med grønne firkanter på alle ansikter det tar opp. I koden bruker vi funksjonen cv2. VideoCapture () til å lagre videoen vi fanger i et objekt som heter "capture". CAPTURE_INDEX er et tall som er angitt av datamaskinen din og som tilsvarer indeksen til kameraet i datamaskinens videoinngangsliste. Hvis du ikke har et eksternt kamera koblet til datamaskinen din, bør 0 eller 1 fungere.

Face_cascade -objektet initialiseres ved hjelp av cascadeClassifier -funksjonen og "haarcascade_frontalface_default.xml" -filen som finnes i OpenCV github. Vi bruker dette objektet til å lagre ansiktene som er oppdaget i listen "ansikter" som en oppføring fireveis-tuppel som holder ansiktene x-koordinat, y-koordinat, bredde og høyde. Vi tegner deretter et rektangel som omslutter ansiktet perfekt ved hjelp av funksjonen cv2.rectangle

Fra denne videoen fanger OpenCV mange bilder i vår loop mens vi bruker capture.read () og lagrer bildet i en ramme vi kalte "img". Hvert bilde blir deretter tolket og modifisert som vi ønsker. For faceDetect gjør vi bildet grått ved hjelp av cvtColor -funksjonen som konverterer bildet som er gitt i den første parameteren til en bestemt type bildefarge som er angitt i den andre parameteren. Listen over akseptable verdier for den andre parameteren finnes online. Vi viser deretter bildet i et vindu med navnet "Detecting the face" ved hjelp av imshow () -funksjonen som tar en streng for vindusnavnet og bilderammen som skal vises.

Til slutt venter vi på at brukeren angir q -tasten med funksjonen cv2.waitKey (). 0xFF -masken brukes som en konvensjon for 64 -biters datamaskiner. Etter at brukeren har avsluttet videostrømmen, frigjør faceDetect -funksjonen fangstobjektet og ødelegger alle andre vinduer som åpnes under OpenCV -grensesnittet. Alle de andre funksjonene følger en lignende designstruktur.

Trinn 2: Bakgrunn Fjern funksjon

Bakgrunn Fjern funksjon
Bakgrunn Fjern funksjon
Bakgrunn Fjern funksjon
Bakgrunn Fjern funksjon

Denne funksjonen prøver å fjerne bakgrunnsdelen av videoen vår og bare la bildet i forgrunnen være. Det fungerer kanskje ikke på noen kameraer, ettersom de bruker en lysjusteringsfunksjonalitet som aktiveres når forskjellige objekter/ brennpunkter kommer inn i rammen. Hvis bakgrunnsfjerningsfunksjonen din ikke fungerer, ikke bekymre deg- det kan bare være kameraet ditt!

For å bruke denne funksjonen, gå bort fra kamerarammen og trykk på "d" -tasten for å ta bakgrunnsbildet. Det er viktig at det ikke er noen objekter i bevegelse i bakgrunnen du ønsker å fange. Deretter kan vi gå tilbake til kamerarammen. Hvis funksjonen fungerte, bør brukeren bare se seg selv på funksjonens videostrøm. Eventuell støy/svarte klatter i forgrunnsbildet kan være et resultat av kameraets lysjustering. For å fange en annen bakgrunn, trykk på "r" -tasten for å initialisere på nytt, og trykk deretter på "d" igjen.

Noen viktige takeaways for denne funksjonen er bruk av "flagg" boolsk som heves i det øyeblikket brukeren trykker på d-knappen. Dette fanger bakgrunnen og lar oss fjerne den fra videoen som streames av funksjonen. Vi tar sikte på å lagre bakgrunnsbildet i ref_img slik at vi kan skille det fra forgrunnsbildet, som fanger ethvert objekt i bevegelse. Vi bruker funksjonen cv2.subtract () til å trekke forgrunnsbildet fra bakgrunnsbildet og omvendt, og deretter fjerne alle små forskjeller i de to bildene umiddelbart etter. Bakgrunnen er mørklagt.

Fgmasken lages ved hjelp av forskjellen mellom disse to bildene og brukes deretter på funksjonene videostrøm ved hjelp av OpenCV cv2.bitwise_and () -funksjonen.

Trinn 3: VideoEdges -funksjon

VideoEdges -funksjon
VideoEdges -funksjon
VideoEdges -funksjon
VideoEdges -funksjon

Denne funksjonen returnerer en live videostrøm, men de påvisbare kantene gjengis hvite mens alt annet er mørkt. Det som skiller denne funksjonen fra de andre funksjonene er konverteringen av vår originale video fra RBG-format til HSV, som står for fargetone, metning og variasjon- en annen metode for behandling av lys og farger fra en video. Med denne metoden kan vi lettere skille konturer i videoen ved å bruke et filter (red_low til red_high).

Canny Edge Detection brukes til å oppdage kantene i et bilde. Den godtar et gråtonebilde som input, og den bruker en flertrinns algoritme.

Trinn 4: VideoBlur -funksjon

VideoBlur -funksjon
VideoBlur -funksjon
VideoBlur -funksjon
VideoBlur -funksjon

Denne funksjonen brukes til å legge til en uskarpe effekt i videostrømmen vår. Funksjonen kaller GaussianBlur cv2 -funksjonen på rammen vår. Mer informasjon om gaussianBlur -funksjonen finner du her:

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

Trinn 5: Forbedringer

Den mest følsomme funksjonen i dette prosjektet er funksjonen for fjerning av bakgrunn, ettersom det krever bruk av et kamera som ikke har lysjusteringsfunksjonalitet. Det kan være et bedre sett med funksjoner i OpenCV -biblioteket som kan stå for denne lysjusteringen og jevnt fjerne bakgrunnen (ligner en grønn skjerm).

Vi kan også bruke andre ansiktsgjenkjenningsfunksjoner som kan produsere objekter med mer funksjonalitet enn bare å returnere (x, y) koordinater. Kanskje et ansiktsgjenkjenningsprogram med evnen til å huske ansikter ikke ville være for vanskelig å implementere.

Uklarhetsfunksjonen kan gjøres mer tilpasset via intuitiv kontroll av brukeren. For eksempel kan det hende at brukeren vil justere intensiteten til uskarphetseffekten eller velge et bestemt område i rammen for å bli uskarpt.

Anbefalt: