Innehållsförteckning:
- Tillbehör
- Steg 1: FaceDetect -funktion
- Steg 2: Bakgrund Ta bort funktion
- Steg 3: VideoEdges -funktion
- Steg 4: VideoBlur -funktion
- Steg 5: Förbättringar
Video: OpenCV Basic Projects: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
I detta projekt utforskar vi några grundläggande OpenCV -funktioner genom fyra enkla projekt som involverar en live videoström. Dessa är ansiktsigenkänning, borttagning av bakgrund, speciell visuell återgivning av kanter och applicering av en suddig effekt på livevideoströmmen. Mitt huvudsakliga syfte med att prova dessa projekt var att helt enkelt bli våt med fötterna med OpenCV -gränssnittet, eftersom jag planerar att fördjupa mig mer inom datorsyn
Tillbehör
- Dator som kör Python
- Öppet CV -bibliotek, Numpy -bibliotek, tkinter -bibliotek, sys -bibliotek
- Kamera för anslutning till dator (om datorn inte redan innehåller en)
- Programmets pythonfil (ingår i denna instruerbara)
- haarcascade xml -fil (ingår i denna instruerbara)
Steg 1: FaceDetect -funktion
Denna funktion visar kamerans video med gröna rutor på alla ansikten den tar upp. I koden använder vi funktionen cv2. VideoCapture () för att lagra videon som vi fångar i ett objekt som heter "capture". CAPTURE_INDEX är ett tal som din dator har angett som motsvarar indexet för din kamera i datorns videoinmatningslista. Om du inte har en yttre kamera ansluten till din dator bör 0 eller 1 fungera.
Face_cascade -objektet initieras med funktionen cascadeClassifier och filen "haarcascade_frontalface_default.xml" som finns i OpenCV -github. Vi använder detta objekt för att lagra de ansikten som upptäcks i listan "ansikten" som en inmatning fyrvägstubel som håller ansikten x-koordinat, y-koordinat, bredd och höjd. Vi ritar sedan en rektangel som omsluter ansiktet perfekt med funktionen cv2.rectangle
Från den här videon tar OpenCV många bilder i vår loop medan vi använder capture.read () och lagrar bilden i en ram som vi kallade "img". Varje bild tolkas och ändras sedan som vi vill. För faceDetect gör vi bilden grå med hjälp av cvtColor -funktionen som konverterar vilken bild som ges i den första parametern till en viss typ av bildfärg som anges i den andra parametern. Listan över acceptabla värden för den andra parametern finns online. Vi visar sedan bilden i ett fönster med namnet "Detecting the face" med hjälp av funktionen imshow () som tar en sträng för fönsternamnet och bildramen som ska visas.
Slutligen väntar vi på att användaren anger tangenten q med funktionen cv2.waitKey (). 0xFF -masken används som en konvention för 64 -bitars datorer. När användaren har avslutat videoströmmen frigör faceDetect -funktionen inspelningsobjektet och förstör sedan alla andra fönster som öppnas under OpenCV -gränssnittet. Alla andra funktioner följer en liknande designstruktur.
Steg 2: Bakgrund Ta bort funktion
Denna funktion försöker ta bort bakgrundsdelen av vår video och lämna endast förgrundsbilden. Det fungerar kanske inte på vissa kameror, eftersom de använder en ljusjusteringsfunktion som aktiveras när olika objekt/ fokus kommer in i ramen. Om din bakgrundRemove-funktion inte fungerar, oroa dig inte- det kan bara vara din kamera!
För att använda den här funktionen, gå bort från kameraramen och tryck på "d" -knappen för att fånga bakgrundsbilden. Det är viktigt att det inte finns några rörliga objekt i bakgrunden du vill fånga. Sedan kan vi gå tillbaka till kameraramen. Om funktionen fungerade ska användaren bara se sig själv i funktionens videoström. Brus/svarta fläckar i förgrunden kan vara ett resultat av kamerans ljusjustering. För att fånga en annan bakgrund, tryck på "r" -knappen för att återinitiera och tryck sedan på "d" igen.
Några viktiga saker för denna funktion är användningen av den "flagga" boolean som höjs så fort användaren trycker på d-knappen. Detta fångar bakgrunden och låter oss ta bort den från videon som streamas av funktionen. Vi strävar efter att lagra bakgrundsbilden i ref_img så att vi kan skilja den från förgrunden, som fångar alla rörliga föremål. Vi använder funktionen cv2.subtract () för att subtrahera den förgrunda bilden från bakgrundsbilden och vice versa, för att sedan avbryta alla små skillnader i de två bilderna direkt efter. Bakgrunden är mörk.
Fgmasken görs med hjälp av skillnaden mellan dessa två bilder och appliceras sedan på funktionernas videoström med funktionen OpenCV cv2.bitwise_and ().
Steg 3: VideoEdges -funktion
Den här funktionen returnerar en live -videoström, men de detekterbara kanterna görs vita medan allt annat är mörkt. Det som skiljer denna funktion från de andra funktionerna är konverteringen av vår originalvideo från RBG-format till HSV, som står för nyans, mättnad och variation- en annan metod för bearbetning av ljus och färg från en video. Med den här metoden kan vi lättare skilja konturer i videon genom att använda ett filter (red_low till red_high).
Canny Edge Detection används för att upptäcka kanterna i en bild. Den accepterar en gråskalebild som input och den använder en flerstegsalgoritm.
Steg 4: VideoBlur -funktion
Denna funktion används för att lägga till en suddig effekt i vår videoström. Funktionen kallar enkelt GaussianBlur cv2 -funktionen på vår ram. Mer information om gaussianBlur -funktionen hittar du här:
opencv-python-tutroals.readthedocs.io/en/l…
Steg 5: Förbättringar
Den mest känsliga funktionen i detta projekt är bakgrundsborttagningsfunktionen, eftersom den kräver användning av en kamera som inte har ljusjusteringsfunktion. Det kan finnas en bättre uppsättning funktioner i OpenCV -biblioteket som kan ta hänsyn till denna belysningsjustering och smidigt ta bort bakgrunden (liknande en grön skärm).
Vi kan också använda andra ansiktsdetekteringsfunktioner som kan producera objekt med mer funktionalitet än att bara returnera (x, y) koordinater. Kanske ett ansiktsigenkänningsprogram med förmåga att komma ihåg ansikten inte skulle vara alltför svårt att genomföra.
Oskärpa -funktionen kan göras mer anpassad via intuitiv kontroll av användaren. Till exempel kan användaren vilja justera intensiteten för suddighetseffekten eller välja ett specifikt område inom ramen som ska suddas.
Rekommenderad:
Handhållen BASIC -dator: 6 steg (med bilder)
Handhållen BASIC -dator: Denna instruktionsbok beskriver min process för att bygga en liten handdator som kör BASIC. Datorn är byggd kring ATmega 1284P AVR -chipet, som också inspirerade det dumma namnet på datorn (HAL 1284) .Denna konstruktion är TYCKLIGT inspirerad av
NAIN 1.0 - Basic Humanoid Robot med Arduino: 6 steg
NAIN 1.0 - Basic Humanoid Robot som använder Arduino: Nain 1.0 kommer att ha i princip 5 avtagbara moduler- 1) Arm - som kan styras via servon. 2) Hjul - som kan styras med likströmsmotorer. 3) Ben - Nain kommer att kunna växla mellan hjul eller ben för rörelse. 4) Huvud &
Telepresence Robot: Basic Platform (Del 1): 23 steg (med bilder)
Telepresence Robot: Basic Platform (Del 1): En telepresence robot är en typ av robot som kan fjärrstyras över internet och fungera som en surrogat för någon annanstans. Till exempel, om du är i New York, men fysiskt vill interagera med ett team av människor i Californien
Walter Microbot Bot Basic Movement: 26 steg
Walter Microbot Bot Basic Movement: Vi kommer att programmera Walter the Micro: Bot
Raspberry Pi Projects Automation: 7 steg
Raspberry Pi Projects Automation: Denna instruerbara innehåller en lista över några av skripten som används för att automatisera saker på hallon pi. De olika skripten har alla slagits samman till ett enda paket som kan användas för att hantera din pi. De kan eventuellt också användas på alla andra