opencv

Datasyn Grunnleggende

Datasyn Grunnleggende
Opencv (Open Source Computer Vision Library) er en Python-modul som brukes til datasyn. OpenCV er en gratis open source-modul som inneholder hundrevis av algoritmer for å utføre forskjellige oppgaver. Alt fra ansiktsgjenkjenning til bevegelsesdeteksjon kan gjøres ved hjelp av OpenCV. I denne guiden vil vi imidlertid se på det grunnleggende om OpenCV.

La oss først installere OpenCV:

pip3 installer opencv-python

Les og vis bilder

Det første vi trenger å lære er å lese og skrive bilder. Å lese en bildefil, legge inn hele banen til filen eller filnavnet (hvis filen er i pythonmappen) og legge til et flagg gjøres ved hjelp av cv2.imread (). Flagget kan ta verdien 1 (for et fargebilde), 0 (for gråtoner) eller -1 (for fargebilde med kanaler). Man kan bruke cv2.imshow () funksjon for å vise bildet; her sendes to argumenter - et navn for bildet og bildet som skal vises. Deretter bruker vi cv2.waitKey () -funksjon for å vente på tastaturinngang; a 0 for cv2.waitKey (0) -funksjonen innebærer en permanent ventetid. På den annen side, cv2.destroyAllWindows () -funksjonen lukker vinduene.

Dette vil lese og åpne et bilde, og holde bildet åpent til du lukker det:

importere cv2
bilde = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('image', image)
cv2.waitKey (0)
cv2.destroyAllWindows ()

Skriv bilder

Vi bruker cv2.imwrite () -funksjon for å lagre et bilde. Denne funksjonen tar to parametere - et navn for å lagre bildet og bildet du vil lagre.

importere cv2
bilde = cv2.imread ('identifiser.jpg ', -1)
cv2.imwrite ('lagre_bilde.png ', bilde)

Ta opp video fra webkamera

For å ta opp videoer begynner vi med å initialisere cv2.VideoCapture () -funksjon. Vi bruker deretter en "while" loop for å fortsette å ta videoen. Mens brukeren ikke trykker på exit-tasten, kan vi lese rammene og vise dem ved å lese () og cv2.imshow () -funksjon. Vi setter deretter inn en "pause" -tast for å gå ut av loop; i dette tilfellet er tallet 27 ESC-nøkkelen. Hvis brukeren trykker på ESC-tasten, bryter de ut fra sløyfen. Når du er ute av løkken, er det nødvendig å frigjøre fangsten.

importer nummen som np
importere cv2
fange = cv2.VideoCapture (0)
mens (True):
ret, ramme = fange.lese()
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == 27:
gå i stykker
fange.utgivelse()
cv2.destroyAllWindows ()

Spille av en videofil

Å spille av en videofil er som å ta en video fra et webkamera. For å gjøre dette, cv2.VideoCapture () -funksjonen brukes; navnet på videofilen du ønsker å spille blir deretter lagt til i funksjonen. “While” -sløyfen brukes igjen, og exit-tasten, i dette tilfellet, er “s” -tasten på tastaturet. Dette åpner og spiller av videofilen og lukker den når brukeren trykker på “s” -tasten.

importer nummen som np
importere cv2
fange = cv2.VideoCapture ("Megamind.avi ")
mens (True):
ret, ramme = fange.lese()
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == ord ("s"):
gå i stykker
fange.utgivelse()
cv2.destroyAllWindows ()

Lagre en videofil

Lagring av en videofil krever litt mer arbeid. Cv2.VideoWriter () -funksjonen tar totalt 4 parametere - utdatafilnavnet, FourCC-koden, antall bilder per sekund og rammestørrelsen. Videre må man spesifisere FourCC-koden, som er videokodeken ved hjelp av cv2.VideoWriter_fourcc () -funksjon. Bruke fangsten.isOpened (), vi leser rammen og skriver utskriftsrammen. Vi kan også vise rammene ved hjelp av cv2.imshow () -funksjon. Deretter bruker vi cv2.waitKey (1) & 0xFF == ord ('s') for å stille inn en exit-tast. I dette tilfellet, hvis brukeren trykker på “s” -tasten, vil de gå ut av sløyfen og deretter slippe fangsten og utgangen og lukker vinduene.

importer nummen som np
importere cv2
fange = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
utgang = cv2.VideoWriter ('utgang.avi ', fourcc, 30.0, (640,480))
while (fange.isOpened ()):
ret, ramme = fange.lese()
produksjon.skriv (ramme)
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == ord ('s'):
gå i stykker
fange.utgivelse()
produksjon.utgivelse()
cv2.destroyAllWindows ()

Tegningslinjer, sirkler, rektangler og tekster

Det første vi skal lære å tegne er en linje. For å tegne en linje bruker vi ganske enkelt cv2.line () -funksjon. Funksjonen tar 5 argumenter - kildevideoen, startpunktet, sluttpunktet, fargen og linjens tykkelse. I det følgende tilfellet har vi bestemt oss for å tegne en rektangulær kant (består av 4 linjer):

importere cv2
fange = cv2.VideoCapture ('vtest.avi ')
mens det er sant:
ret, ramme = fange.lese()
bredde = int (fange.få (3))
høyde = int (fange.få (4))
linje1 = cv2.linje (ramme, (0,0), (0, høyde), (255, 255, 255), 10)
linje2 = cv2.linje (linje1, (0, 0), (bredde, 0), (255, 255, 255), 10)
linje3 = cv2.linje (linje2, (0, høyde), (bredde, høyde), (255, 255, 255), 10)
linje4 = cv2.linje (linje 3, (bredde, 0), (bredde, høyde), (255, 255, 255), 10)
cv2.imshow ('ramme', linje 4)
hvis cv2.waitKey (40) == ord ('q'):
gå i stykker
fange.utgivelse()
cv2.destroyAllWindows ()

Deretter tegner vi både en sirkel og et rektangel på videoen. For å tegne et rektangel bruker vi cv2.rektangel () -funksjon, som tar 5 argumenter omtrent som linjen. For å tegne en sirkel bruker vi funksjonen cv2.sirkel (), som også tar 5 argumenter - kildevideoen, midtpunktet, radiusen, fargen og tykkelsen.

importere cv2
fange = cv2.VideoCapture ('vtest.avi ')
mens det er sant:
ret, ramme = fange.lese()
bredde = int (fange.få (3))
høyde = int (fange.få (4))
rektangel = cv2.rektangel (ramme, (150, 15), (650, 550), (0,0,0), 11)
cv2.sirkel (rektangel, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (40) == ord ('q'):
gå i stykker
fange.utgivelse()
cv2.destroyAllWindows ()

La oss nå legge til litt tekst i videoen vi har. For å gjøre dette må vi spesifisere en skrift; her valgte vi cv2.FONT_HERSHEY_SIMPLEX. Når skriften er valgt, kan vi bruke funksjonen cv2.putText () for å gjøre resten. Cv2.putText () tar 8 argumenter - kildevideoen, teksten du vil skrive, posisjonen der du vil ha den, fonten, forstørrelsen, fargen, tykkelsen og cv2.LINE_AA (som gjør at alt ser bedre ut).

importere cv2
fange = cv2.VideoCapture ('vtest.avi ')
mens det er sant:
ret, ramme = fange.lese()
bredde = int (fange.få (3))
høyde = int (fange.få (4))
font = cv2.FONT_HERSHEY_SIMPLEX
bilde = cv2.putText (ramme, "VTEST.AVI ", (200, 200), font, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('ramme', bilde)
hvis cv2.waitKey (40) == ord ('q'):
gå i stykker
fange.utgivelse()
cv2.destroyAllWindows ()

OpenCV er i stand til mange flotte ting der man må begynne et sted. Det kan være å lære å lage og lagre bilder og videoer. I denne opplæringen lærte vi å gjøre det grunnleggende om datasyn.

Glad koding!

Mus Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
De fleste Linux-distribusjoner leveres med "libinput" -biblioteket som standard for å håndtere inngangshendelser på et system. Den kan behandle inngan...
Mus Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kanskje du trenger et verktøy som kan gjøre at musens kontroll endres med hvert program du bruker. Hvis dette er tilfelle, kan du prøve et program som...
Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jeg har nylig lest om Microsoft Sculpt Touch trådløs mus og bestemte meg for å kjøpe den. Etter å ha brukt den en stund bestemte jeg meg for å dele mi...