Innholdsfortegnelse:

Enkel fargedeteksjon ved bruk av OpenCV: 6 trinn
Enkel fargedeteksjon ved bruk av OpenCV: 6 trinn

Video: Enkel fargedeteksjon ved bruk av OpenCV: 6 trinn

Video: Enkel fargedeteksjon ved bruk av OpenCV: 6 trinn
Video: Fårikål med smak av verden | MatPrat 2024, Juni
Anonim
Enkel fargedeteksjon ved hjelp av OpenCV
Enkel fargedeteksjon ved hjelp av OpenCV

Hei! I dag skal jeg vise en enkel metode for å oppdage en farge fra en live video ved hjelp av OpenCV og python.

I utgangspunktet vil jeg bare teste den nødvendige fargen som er tilstede i bakgrunnsrammen eller ikke, og ved å bruke OpenCV -moduler vil jeg maskere regionen og samtidig vise rammen.

Trinn 1: Toppfilene

Toppfilene
Toppfilene

Nå her har jeg brukt to topptekster, nemlig cv2 og NumPy. I utgangspunktet er cv2 OpenCV -biblioteket som laster alle c ++ - filene som er viktige mens du bruker kommandoene i kodene (den inneholder alle definisjonene).

Og Numpy er et python -bibliotek som er avgjørende for lagring av en flerdimensjonal matrise. Vi skal bruke til å lagre våre fargespekterskoordinater.

Og numpy as np hjelper i utgangspunktet koden vår med å forkorte litt ved å bruke np hver gang i stedet for numpy.

Trinn 2: Ta opp videoen

Ta opp videoen
Ta opp videoen

Dette er ganske enkelt mens du bruker python. Her trenger vi bare å slå på videoopptaker slik at den kan begynne å spille inn bildene.

Nå indikerer verdien inne i VideoCapture kameraet, i mitt tilfelle er kameraet koblet til den bærbare datamaskinen min, så 0.

Du kan gå på samme måte som 1 for det sekundære kameraet og så videre. VideoCapture lager objektet for det.

Trinn 3: Ta bilde og definere farge

Ta bilde og definere farge
Ta bilde og definere farge

Nå må vi gjøre noe slik at vi kan fange øyeblikksrammen til videoen som vil hjelpe oss med å trekke ut bildet, og vi kan jobbe med det i henhold til kravet.

"while" -løkke vil hjelpe oss med å kjøre løkken til vår kravtid. Nå brukes "_, frame = cap.read ()" for å kontrollere gyldigheten av rammen som er fanget og lagre den. "cap.read () er en boolsk variabel og returnerer true hvis rammen blir lest riktig, og hvis du ikke får noen rammer vil det ikke vise noen feil, du vil ganske enkelt få None.

Nå definerer linje 11 og linje 12 i utgangspunktet fargeområdet vi trenger å oppdage. For dette har jeg brukt til blå farge.

Du kan fortsette med hvilken som helst farge for det du bare trenger å skrive inn BGR -verdier for den aktuelle fargen. Det er bedre å definere to matriser ved hjelp av numpy -arrays, ettersom detektering av en bestemt farge i den virkelige verden ikke vil tjene vårt formål, snarere vil vi definere et område med blå farger slik at den oppdager innenfor området.

For dette har jeg definert to variabler som lagrer de nedre BGR -verdiene og de øvre BGR -verdiene.

Trinn 4: Maskering og ekstraksjon

Maskering og ekstraksjon
Maskering og ekstraksjon

Nå kommer hovedoppgaven med å maskere rammen og trekke ut fargen på rammen. Jeg brukte de forhåndsdefinerte kommandoene som er tilstede i biblioteket i OpenCV for å gjøre maskeringen. I utgangspunktet er maskering prosessen med å fjerne en del av rammen, det vil si at vi vil fjerne pikslene hvis farge BGR -verdier som ikke ligger i det definerte fargeområdet, og dette gjøres av cv2.inRange. Etterpå bruker vi fargeområdet på det maskerte bildet avhengig av pikselverdiene, og for dette vil vi bruke cv2.bitwise_and, Det vil ganske enkelt tildele fargene til det maskerte området avhengig av maske- og fargeområdet.

Lenke til cv2. bitwise_and:

Trinn 5: Endelig vises

Endelig vises!
Endelig vises!

Her har jeg brukt den grunnleggende cv2.imshow () for å vise hver ramme som et bilde. Siden jeg har rammedata lagret i variabler, kan jeg hente dem i imshow (). Her har jeg vist alle de tre bildene, originale, maskerte og fargede.

Nå må vi gå ut av mens -sløyfen. For dette kan vi ganske enkelt implementere cv2.wait. Key (). I utgangspunktet forteller det ventetiden før du svarer. Så hvis du passerer 0, venter det uendelig og 0xFF forteller at arkitekturen er 64bit. "ord ()" angir tegnet som når det trykkes vil utføre pause -kommandoen i hvis blokk og det vil komme ut av løkken.

Deretter lukker cap.release () videoopptakeren og cv2.destroyAllWindows () lukker alle åpnede vinduer.

Gi meg beskjed hvis du har problemer.

Lenke til kildekoden:

Anbefalt: