Computer Vision det grunnleggende

Computer Vision det grunnleggende
OpenCV (Open Source Computer Vision Library) er en Python -modul som brukes til datamaskinvisjon. 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 Python -mappen), og legge til et flagg blir gjort ved hjelp av CV2.imread (). Flagget kan ta verdien av 1 (for et fargebilde), 0 (for gråtoner) eller -1 (for fargebilde med kanaler). Man kan bruke CV2.IMshow () -funksjon for å vise bildet; Her blir to argumenter bestått - et navn på bildet og bildet å vise. Deretter bruker vi CV2.WaitKey () -funksjonen for å vente på en tastaturinngang; A 0 for CV2.WaitKey (0) -funksjon innebærer en permanent ventetid. På den annen side CV2.DestroyAllWindows () -funksjonen vil lukke vinduene.

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

Importer 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 ønsker å lagre.

Importer CV2
Bilde = CV2.imread ('Identifiser.jpg ', -1)
CV2.imwrite ('save_image.png ', bilde)

Fang video fra webkamera

For å fange opp videoer begynner vi med å initialisere CV2.Videocapture () -funksjon. Vi bruker deretter en "mens" -løyfe for å fortsette å fange videoen. Mens brukeren ikke trykker på exit -tasten, kan vi lese rammene og vise dem ved hjelp av lest () og CV2.IMshow () -funksjon. Vi satte deretter inn en "break" -tast for å avslutte sløyfen; I dette tilfellet er tallet 27 ESC -tasten. Hvis brukeren trykker på ESC -tasten, bryter de ut fra løkken. Når du er ute av løkken, er det nødvendig å frigjøre fangsten.

Importer numpy som NP
Importer CV2
Capture = CV2.Videocapture (0)
mens (sant):
ret, ramme = fangst.lese()
CV2.Imshow ('ramme', ramme)
Hvis CV2.WaitKey (1) & 0xff == 27:
gå i stykker
fange.utgivelse()
CV2.DestroyAllWindows ()

Spiller en videofil

Å spille en videofil er som å fange en video fra et webkamera. Å gjøre dette, CV2.Videocapture () -funksjon brukes; Navnet på videofilen du ønsker å spille blir deretter lagt til funksjonen. "Mens" -løkken brukes igjen, og avkjøringsnøkkelen, i dette tilfellet, er "S" -tasten på tastaturet. Dette vil åpne og spille av videofilen og lukker den når brukeren trykker på "S" -tasten.

Importer numpy som NP
Importer CV2
Capture = CV2.Videokapture ("Megamind.avi ")
mens (sant):
ret, ramme = fangst.lese()
CV2.Imshow ('ramme', ramme)
Hvis CV2.WaitKey (1) & 0xff == Ord ("S"):
gå i stykker
fange.utgivelse()
CV2.DestroyAllWindows ()

Lagrer en videofil

Å lagre en videofil krever litt mer arbeid. CV2.VideoWriter () -funksjonen tar totalt 4 parametere - Utgangsfilnavnet, Fourcc -koden, antall rammer per sekund, og rammestørrelsen. Videre må man spesifisere FourCC -koden, som er videokodeken ved hjelp av CV2.VideoWriter_Fourcc () funksjon. Ved hjelp av fangsten.isopened (), vi leser rammen og skriver utgangsrammen. Vi kan også vise rammene ved hjelp av CV2.IMshow () -funksjon. Deretter bruker vi CV2.WaitKey (1) & 0xff == Ord ('S') for å angi en exit -tast. I dette tilfellet, hvis brukeren trykker på “S” -tasten, vil de avslutte løkken og deretter frigjøre fangsten og utgangen og lukker vinduene.

Importer numpy som NP
Importer CV2
Capture = CV2.Videocapture (0)
firecc = cv2.VideoWriter_Fourcc (*'XVID')
utgang = CV2.VideoWriter ('output.Avi ', firecc, 30.0, (640.480)))
mens (fang.isopened ()):
ret, ramme = fangst.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 lærer å tegne er en linje. For å tegne en linje bruker vi ganske enkelt CV2.Linje () Funksjon. Funksjonen tar 5 argumenter - kildevideoen, utgangspunktet, sluttpunktet, fargen og linjens tykkelse. I det følgende tilfellet har vi bestemt oss for å trekke en rektangulær kant (bestående av 4 linjer):

Importer CV2
Capture = CV2.Videocapture ('Vtest.avi ')
Mens sant:
ret, ramme = fangst.lese()
bredde = int (fangst.få (3))
høyde = int (fangst.få (4))
LINE1 = CV2.linje (ramme, (0,0), (0, høyde), (255, 255, 255), 10)
LINE2 = CV2.linje (linje1, (0, 0), (bredde, 0), (255, 255, 255), 10)
LINE3 = CV2.linje (linje2, (0, høyde), (bredde, høyde), (255, 255, 255), 10)
LINE4 = CV2.linje (linje3, (bredde, 0), (bredde, høyde), (255, 255, 255), 10)
CV2.Imshow ('ramme', linje4)
Hvis CV2.WaitKey (40) == Ord ('Q'):
gå i stykker
fange.utgivelse()
CV2.DestroyAllWindows ()

Neste, vi tegner 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.Circle (), som også tar 5 argumenter - kildevideoen, midtpunktet, radien, fargen og tykkelsen.

Importer CV2
Capture = CV2.Videocapture ('Vtest.avi ')
Mens sant:
ret, ramme = fangst.lese()
bredde = int (fangst.få (3))
høyde = int (fangst.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.Puttxt () tar 8 argumenter - kildevideoen, teksten du ønsker å skrive, posisjonen der du vil ha den, skriften, forstørrelsen, fargen, tykkelsen og CV2.Line_aa (som gjør at alt ser bedre ut).

Importer CV2
Capture = CV2.Videocapture ('Vtest.avi ')
Mens sant:
ret, ramme = fangst.lese()
bredde = int (fangst.få (3))
høyde = int (fangst.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 gode 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 i datamaskinvisjonen.

Glad koding!