Innehållsförteckning:

Enkel färgdetektering med OpenCV: 6 steg
Enkel färgdetektering med OpenCV: 6 steg

Video: Enkel färgdetektering med OpenCV: 6 steg

Video: Enkel färgdetektering med OpenCV: 6 steg
Video: Anil Seth: Neurovetenskap om medvetande och jag 2024, November
Anonim
Enkel färgdetektering med OpenCV
Enkel färgdetektering med OpenCV

Hej! Idag ska jag visa en enkel metod för att upptäcka en färg från en livevideo med OpenCV och python.

I grund och botten testar jag bara den färg som krävs i bakgrundsramen eller inte och med OpenCV -moduler kommer jag att maskera den regionen och samtidigt visa ramen.

Steg 1: Rubrikfilerna

Rubrikfilerna
Rubrikfilerna

Nu här har jag använt två rubrikfiler, nämligen cv2 och NumPy. I grund och botten är cv2 OpenCV -biblioteket som laddar alla c ++ - filer som är viktiga när kommandona i koderna används (den innehåller alla definitioner).

Och Numpy är ett pythonbibliotek som är viktigt för att lagra en flerdimensionell array. Vi kommer att använda för att lagra våra färgkoordinater.

Och numpy as np hjälper i princip vår kod att förkorta lite genom att använda np varje gång istället för numpy.

Steg 2: Spela in videon

Spela in videon
Spela in videon

Detta är ganska enkelt när du använder python. Här behöver vi bara slå på videobandspelare så att den kan börja spela in ramarna.

Nu indikerar värdet i VideoCapture kameran, i mitt fall är kameran ansluten till min bärbara dator, så 0.

Du kan gå på samma sätt som 1 för den sekundära kameran och så vidare. VideoCapture skapar objektet för det.

Steg 3: Fånga ram och definiera färg

Fånga ram och definiera färg
Fånga ram och definiera färg

Nu måste vi göra något så att vi kan fånga den snabba ramen i videon som hjälper oss att extrahera bilden och vi kan arbeta med det enligt kraven.

"while" -slinga hjälper oss att köra slingan till vår kravtid. Nu används "_, frame = cap.read ()" för att kontrollera giltigheten av den fångade ramen och lagra den. "cap.read () är en booleska variabel och returnerar true om ramen läses korrekt och om du inte får några ramar kommer det inte att visa något fel, du får helt enkelt None.

Nu definierar rad 11 och linje 12 i princip det färgintervall vi behöver upptäcka. För detta har jag brukat blå färg.

Du kan fortsätta med vilken färg som helst som du behöver bara skriva BGR -värden för just den färgen. Det är bättre att definiera två matriser med numpy -arrays eftersom detektering av en viss färg i den verkliga världen inte kommer att tjäna vårt syfte, snarare kommer vi att definiera ett intervall av blå färg så att den detekterar inom intervallet.

För detta har jag definierat två variabler som lagrar de lägre BGR -värdena och de övre BGR -värdena.

Steg 4: Maskera och extrahera

Maskering och extrahering
Maskering och extrahering

Nu kommer här huvuduppgiften att maskera ramen och extrahera färgen på ramen. Jag använde de fördefinierade kommandona som finns i biblioteket i OpenCV för att göra maskeringen. I grund och botten är maskering processen att ta bort en del av ramen, dvs vi kommer att ta bort pixlarna vars BGR -värden som inte ligger i det definierade färgintervallet och detta görs av cv2.inRange. Därefter applicerar vi färgintervallet på den maskerade bilden beroende på pixelvärdena och för detta kommer vi att använda cv2.bitwise_and, Det kommer helt enkelt att tilldela färgerna till det maskerade området beroende på maskens och färgintervallets värden.

Länk till cv2. bitvis_och:

Steg 5: Äntligen visas

Äntligen visas!
Äntligen visas!

Här har jag använt den grundläggande cv2.imshow () för att visa för varje bildruta som en bild. Eftersom jag har ramdata lagrade i variabler kan jag hämta dem i imshow (). Här har jag visat alla tre ramarna, original, maskerade och färgade.

Nu måste vi lämna while -slingan. För detta kan vi helt enkelt implementera cv2.wait. Key (). I princip berättar det väntetiden innan du svarar. Så om du passerar 0 väntar det oändligt och 0xFF säger att arkitekturen är 64bit. "ord ()" anger tecknet som när det trycks kommer att utföra kommandot break i if block och det kommer ut ur slingan.

Sedan stänger cap.release () videoinspelaren och cv2.destroyAllWindows () stänger alla öppnade fönster.

Meddela mig om du har några problem.

Länk till källkoden:

Rekommenderad: