Indholdsfortegnelse:

Enkel farveregistrering ved hjælp af OpenCV: 6 trin
Enkel farveregistrering ved hjælp af OpenCV: 6 trin

Video: Enkel farveregistrering ved hjælp af OpenCV: 6 trin

Video: Enkel farveregistrering ved hjælp af OpenCV: 6 trin
Video: Enkel GO 2024, November
Anonim
Enkel farveregistrering ved hjælp af OpenCV
Enkel farveregistrering ved hjælp af OpenCV

Hej! I dag vil jeg vise en enkel metode til at registrere en farve fra en live video ved hjælp af OpenCV og python.

Grundlæggende vil jeg bare teste den nødvendige farve, der er til stede i baggrundsrammen eller ej, og ved hjælp af OpenCV -moduler vil jeg maskere denne region og samtidig vise rammen.

Trin 1: Hovedfilerne

Hovedfilerne
Hovedfilerne

Nu her har jeg brugt to header -filer, nemlig cv2 og NumPy. Grundlæggende er cv2 OpenCV -biblioteket, der indlæser alle de c ++ - filer, der er vigtige, mens du bruger kommandoerne i koderne (det indeholder alle definitionerne).

Og Numpy er et python -bibliotek, der er afgørende for lagring af et multidimensionalt array. Vi vil bruge til at gemme vores farvekoordinater.

Og numpy as np hjælper dybest set vores kode med at forkorte lidt ved at bruge np hver gang i stedet for numpy.

Trin 2: Optagelse af videoen

Optagelse af videoen
Optagelse af videoen

Dette er ret simpelt, mens du bruger python. Her mangler vi bare at tænde for videooptager, så den kan begynde at optage billederne.

Nu angiver værdien inde i VideoCapture kameraet, i mit tilfælde er kameraet forbundet til min bærbare computer, så 0.

Du kan gå på samme måde som 1 for det sekundære kamera og så videre. VideoCapture opretter objektet til det.

Trin 3: Optagelse af ramme og definition af farve

Optagelse af ramme og definition af farve
Optagelse af ramme og definition af farve

Nu er vi her nødt til at gøre noget, så vi kan fange videoens øjeblikkelige ramme, som vil hjælpe os med at udtrække billedet, og vi kan arbejde med det efter krav.

"while" loop vil hjælpe os med at køre loop til vores kravstid. Nu bruges "_, frame = cap.read ()" til at kontrollere gyldigheden af den fangede ramme og gemme den. "cap.read () er en boolsk variabel og returnerer true, hvis rammen læses korrekt, og hvis du ikke får nogen rammer, viser den ikke nogen fejl, du får ganske enkelt None.

Nu definerer linje 11 og linje 12 dybest set det farveområde, vi skal registrere. Til dette har jeg brugt til blå farve.

Du kan fortsætte med en hvilken som helst farve, du bare skal skrive BGR -værdier for den pågældende farve. Det er bedre at definere to arrays ved hjælp af numpy arrays, da detektering af en bestemt farve i den virkelige verden ikke vil tjene vores formål, snarere vil vi definere en række blå farver, så den registrerer inden for området.

Til dette har jeg defineret to variabler, der lagrer de lavere BGR -værdier og øvre BGR -værdier.

Trin 4: Maskering og udtrækning

Maskering og ekstraktion
Maskering og ekstraktion

Nu kommer hovedopgaven med at maskere rammen og udtrække rammens farve. Jeg brugte de foruddefinerede kommandoer i biblioteket i OpenCV til at udføre maskeringen. Grundlæggende maskering er processen med at fjerne en del af rammen, dvs. vi vil fjerne de pixels, hvis farve BGR -værdier, der ikke ligger i det definerede farveområde, og dette udføres af cv2.inRange. Bagefter anvender vi farveområdet til det maskerede billede afhængigt af pixelværdierne, og til dette vil vi bruge cv2.bitwise_and, Det vil simpelthen tildele farverne til det maskerede område afhængigt af maske- og farveintervalværdierne.

Link til cv2. bitwise_and:

Trin 5: Endelig visning

Endelig vises!
Endelig vises!

Her har jeg brugt det grundlæggende cv2.imshow () til visning for hver ramme som et billede. Da jeg har rammedataene gemt i variabler, kan jeg hente dem i imshow (). Her har jeg vist alle de tre rammer, originale, maskerede og farvede.

Nu skal vi forlade while -loop. Til dette kan vi simpelthen implementere cv2.wait. Key (). Grundlæggende fortæller det ventetiden, før der reageres. Så hvis du passerer 0, venter det uendeligt, og 0xFF fortæller, at arkitekturen er 64bit. "ord ()" angiver det tegn, der, når der trykkes på, vil udføre break -kommandoen i if -blok, og det vil komme ud af sløjfen.

Derefter lukker cap.release () videooptageren, og cv2.destroyAllWindows () lukker alle de åbne vinduer.

Lad mig vide, hvis du har problemer.

Link til kildekoden:

Anbefalede: