Inhoudsopgave:

Eenvoudige kleurdetectie met OpenCV - Ajarnpa
Eenvoudige kleurdetectie met OpenCV - Ajarnpa

Video: Eenvoudige kleurdetectie met OpenCV - Ajarnpa

Video: Eenvoudige kleurdetectie met OpenCV - Ajarnpa
Video: Gezichten programmeren 2024, November
Anonim
Eenvoudige kleurdetectie met OpenCV
Eenvoudige kleurdetectie met OpenCV

Hoi! Vandaag ga ik een eenvoudige methode laten zien voor het detecteren van een kleur uit een live video met behulp van OpenCV en python.

In principe zal ik gewoon testen of de vereiste kleur aanwezig is in het achtergrondframe of niet en met behulp van OpenCV-modules zal ik dat gebied maskeren en tegelijkertijd het frame weergeven.

Stap 1: De kopbestanden

De kopbestanden
De kopbestanden

Nu heb ik hier twee header-bestanden gebruikt, namelijk cv2 en NumPy. In feite is cv2 de OpenCV-bibliotheek die alle c++-bestanden laadt die belangrijk zijn bij het gebruik van de opdrachten in de codes (het bevat alle definities).

En Numpy is een python-bibliotheek die essentieel is voor het opslaan van een multidimensionale array. We zullen gebruiken om de coördinaten van ons kleurengamma op te slaan.

En numpy als np helpt onze code in feite om een beetje in te korten door elke keer np te gebruiken in plaats van numpy.

Stap 2: De video vastleggen

De video vastleggen
De video vastleggen

Dit is vrij eenvoudig tijdens het gebruik van python. Hier hoeven we alleen de videorecorder in te schakelen, zodat deze kan beginnen met het opnemen van de frames.

Nu geeft de waarde in de VideoCapture de camera aan, in mijn geval is de camera aangesloten op mijn laptop, dus 0.

U kunt op dezelfde manier gaan als 1 voor de secundaire camera, enzovoort. VideoCapture maakt er het object voor.

Stap 3: Frame vastleggen en kleur definiëren

Frame vastleggen en kleur definiëren
Frame vastleggen en kleur definiëren

Nu moeten we hier iets doen zodat we het instantframe van de video kunnen vastleggen dat ons zal helpen de afbeelding te extraheren en we kunnen daaraan werken volgens de vereisten.

"while" -lus zal ons helpen om de lus uit te voeren volgens onze vereiste tijd. Nu wordt " _, frame = cap.read() " gebruikt om de geldigheid van het vastgelegde frame te controleren en op te slaan. "cap.read() is een booleaanse variabele en retourneert true als het frame correct wordt gelezen en als je geen frames krijgt, zal het geen enkele fout tonen, je krijgt gewoon Geen.

Nu definiëren regel 11 en regel 12 in feite het kleurbereik dat we moeten detecteren. Hiervoor heb ik blauwe kleur gebruikt.

U kunt doorgaan met elke kleur waarvoor u alleen BGR-waarden voor die specifieke kleur hoeft in te voeren. Het is beter om twee arrays te definiëren met behulp van numpy-arrays, omdat het detecteren van een bepaalde kleur in de echte wereld ons doel niet zal dienen, maar we zullen een bereik van blauwe kleuren definiëren zodat het binnen het bereik detecteert.

Hiervoor heb ik twee variabelen gedefinieerd die de lagere BGR-waarden en de bovenste BGR-waarden opslaan.

Stap 4: Maskeren en extraheren

Maskeren en extraheren
Maskeren en extraheren

Nu komt hier de hoofdtaak van het maskeren van het frame en het extraheren van de kleur van het frame. Ik heb de vooraf gedefinieerde opdrachten gebruikt die aanwezig zijn in de bibliotheek in OpenCV om de maskering uit te voeren. In wezen is maskeren het proces van het verwijderen van een deel van het frame, d.w.z. we zullen de pixels verwijderen waarvan de kleur-BGR-waarden niet in het gedefinieerde kleurbereik liggen en dit wordt gedaan door cv2.inRange. Daarna passen we het kleurbereik toe op de gemaskeerde afbeelding, afhankelijk van de pixelwaarden en hiervoor zullen we cv2.bitwise_and gebruiken. Het zal eenvoudig de kleuren toewijzen aan het gemaskeerde gebied, afhankelijk van de masker- en kleurbereikwaarden.

Link voor cv2. bitwise_and:

Stap 5: Eindelijk weergeven

Eindelijk Weergeven!
Eindelijk Weergeven!

Hier heb ik de basis cv2.imshow() gebruikt om voor elk frame als afbeelding weer te geven. Omdat ik de framegegevens heb opgeslagen in variabelen, kan ik ze ophalen in imshow(). Hier heb ik alle drie de frames weergegeven, origineel, gemaskeerd en gekleurd.

Nu moeten we de while-lus verlaten. Hiervoor kunnen we eenvoudig de cv2.wait. Key() implementeren. In feite vertelt het de wachttijd voordat het reageert. Dus als je 0 passeert, zal het oneindig wachten en 0xFF vertelt dat de architectuur 64bit is. " ord() " specificeert het teken dat, wanneer ingedrukt, het break-commando in if-blok zal uitvoeren en uit de lus zal komen.

Dan sluit cap.release() de videorecorder en cv2.destroyAllWindows() sluit alle geopende vensters.

Als je een probleem hebt, laat het me dan weten.

Link naar broncode:

Aanbevolen: