opencv

Computervision Grundlæggende

Computervision Grundlæggende
Opencv (Open Source Computer Vision Library) er et Python-modul, der bruges til computersyn. OpenCV er et gratis open source-modul, der indeholder hundredvis af algoritmer til at udføre forskellige opgaver. Alt fra ansigtsgenkendelse til bevægelsesdetektering kan gøres ved hjælp af OpenCV. I denne vejledning vil vi dog se på det grundlæggende i OpenCV.

Lad os først installere OpenCV:

pip3 installer opencv-python

Læs og vis billeder

Den første ting, vi skal lære, er at læse og skrive billeder. Læsning af en billedfil, indtastning af den fulde sti til filen eller filnavnet (hvis filen er i python-mappen) og tilføjelse af et flag gøres ved hjælp af cv2.imread (). Flagget kan tage værdien 1 (for et farvebillede), 0 (for gråtoner) eller -1 (for farvebillede med kanaler). Man kan bruge cv2.imshow () funktion for at vise billedet; her sendes to argumenter - et navn til billedet og billedet, der skal vises. Dernæst bruger vi cv2.waitKey () funktion for at vente på tastaturindgang; a 0 for cv2.waitKey (0) -funktionen indebærer en permanent ventetid. På den anden side er cv2.destroyAllWindows () -funktionen lukker vinduerne.

Dette vil læse og åbne et billede og holde billedet åbent, indtil du lukker det:

importer cv2
billede = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('billede', billede)
cv2.Vent nøgle (0)
cv2.destroyAllWindows ()

Skriv billeder

Vi bruger cv2.imwrite () -funktion for at gemme et billede. Denne funktion tager to parametre - et navn til at gemme billedet og det billede, du ønsker at gemme.

importer cv2
billede = cv2.imread ('identificer.jpg ', -1)
cv2.imwrite ('gem_billede.png ', billede)

Optag video fra webcam

For at optage videoer begynder vi med at initialisere cv2.VideoCapture () funktion. Vi bruger derefter en "while" loop til at fortsætte med at optage videoen. Mens brugeren ikke trykker på exit-tasten, kan vi læse rammerne og vise dem ved hjælp af read () og cv2.imshow () funktion. Vi indsætter derefter en "pause" -tast for at forlade sløjfen; i dette tilfælde er tallet 27 ESC-nøglen. Hvis brugeren trykker på ESC-tasten, bryder de ud fra sløjfen. Når det er ude af løkken, er det nødvendigt at frigive fangsten.

importer numpy som np
importer cv2
capture = cv2.VideoCapture (0)
mens (Sand):
ret, frame = capture.Læs()
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == 27:
pause
fange.frigøre()
cv2.destroyAllWindows ()

Afspilning af en videofil

Afspilning af en videofil er som at optage en video fra et webcam. For at gøre dette skal cv2.VideoCapture () funktion bruges; navnet på den videofil, du ønsker at afspille, føjes derefter til funktionen. “While” -sløjfen bruges igen, og exit-tasten er i dette tilfælde “s” -tasten på tastaturet. Dette åbner og afspiller videofilen og lukker den, når brugeren trykker på “s” -tasten.

importer numpy som np
importer cv2
capture = cv2.VideoCapture ("Megamind.avi ")
mens (Sand):
ret, frame = capture.Læs()
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == ord ("s"):
pause
fange.frigøre()
cv2.destroyAllWindows ()

Gemme en videofil

At gemme en videofil kræver lidt mere arbejde. Cv2.VideoWriter () -funktionen tager i alt 4 parametre - outputfilnavnet, FourCC-koden, antallet af billeder pr. Sekund og rammestørrelsen. Desuden skal man angive FourCC-koden, som er videokodeken ved hjælp af cv2.VideoWriter_fourcc () funktion. Brug af fangsten.isOpened (), vi læser rammen og skriver outputrammen. Vi kan også vise rammerne ved hjælp af cv2.imshow () funktion. Derefter bruger vi cv2.waitKey (1) & 0xFF == ord ('s') for at indstille en exit-nøgle. I dette tilfælde, hvis brugeren trykker på “s” -tasten, vil de forlade sløjfen og derefter frigive fangsten og output og lukker vinduerne.

importer numpy som np
importer cv2
capture = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
output = cv2.VideoWriter ('output.avi ', fourcc, 30.0, (640.480))
while (fange.isOpened ()):
ret, frame = capture.Læs()
produktion.skriv (ramme)
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (1) & 0xFF == ord ('s'):
pause
fange.frigøre()
produktion.frigøre()
cv2.destroyAllWindows ()

Tegningslinjer, cirkler, rektangler og tekster

Den første ting, vi lærer at tegne, er en linje. For at tegne en linje bruger vi simpelthen cv2.line () funktion. Funktionen tager 5 argumenter - kildevideoen, startpunktet, slutpunktet, farven og linjens tykkelse. I det følgende tilfælde har vi besluttet at tegne en rektangulær kant (sammensat af 4 linjer):

importer cv2
capture = cv2.VideoCapture ('vtest.avi ')
mens det er sandt:
ret, frame = capture.Læs()
bredde = int (capture.få (3))
højde = int (fange.få (4))
linje1 = cv2.linje (ramme, (0,0), (0, højde), (255, 255, 255), 10)
linje2 = cv2.linje (linje 1, (0, 0), (bredde, 0), (255, 255, 255), 10)
linje3 = cv2.linje (linje2, (0, højde), (bredde, højde), (255, 255, 255), 10)
linje4 = cv2.linje (linje 3, (bredde, 0), (bredde, højde), (255, 255, 255), 10)
cv2.imshow ('frame', line4)
hvis cv2.waitKey (40) == ord ('q'):
pause
fange.frigøre()
cv2.destroyAllWindows ()

Dernæst tegner vi både en cirkel og et rektangel på videoen. For at tegne et rektangel bruger vi cv2.rektangel () -funktion, som tager 5 argumenter som linjen. For at tegne en cirkel bruger vi funktionen cv2.cirkel (), som også tager 5 argumenter - kildevideoen, midtpunktet, radius, farve og tykkelse.

importer cv2
capture = cv2.VideoCapture ('vtest.avi ')
mens det er sandt:
ret, frame = capture.Læs()
bredde = int (capture.få (3)
højde = int (fange.få (4))
rektangel = cv2.rektangel (ramme, (150, 15), (650, 550), (0,0,0), 11)
cv2.cirkel (rektangel, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('ramme', ramme)
hvis cv2.waitKey (40) == ord ('q'):
pause
fange.frigøre()
cv2.destroyAllWindows ()

Lad os nu tilføje lidt tekst til den video, vi har. For at gøre dette skal vi angive en skrifttype; her valgte vi cv2.FONT_HERSHEY_SIMPLEX. Når skrifttypen er valgt, kan vi bruge funktionen cv2.putText () for at gøre resten. Cv2.putText () tager 8 argumenter - kildevideoen, den tekst, du vil skrive, den position, hvor du vil have den, skrifttypen, forstørrelsen, farven, tykkelsen og cv2.LINE_AA (som får alt til at se bedre ud).

importer cv2
capture = cv2.VideoCapture ('vtest.avi ')
mens det er sandt:
ret, frame = capture.Læs()
bredde = int (capture.få (3)
højde = int (fange.få (4))
skrifttype = cv2.FONT_HERSHEY_SIMPLEX
billede = cv2.putText (ramme, "VTEST.AVI ", (200, 200), skrifttype, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('ramme', billede)
hvis cv2.waitKey (40) == ord ('q'):
pause
fange.frigøre()
cv2.destroyAllWindows ()

OpenCV er i stand til mange gode ting, hvor man skal begynde et eller andet sted. Det kunne være at lære at oprette og gemme billeder og videoer. I denne vejledning lærte vi at gøre det grundlæggende i computersyn.

Glad kodning!

Sådan downloades og afspilles Sid Meiers Civilization VI på Linux
Introduktion til spillet Civilization 6 er et moderne udtryk for det klassiske koncept, der blev introduceret i serien af ​​Age of Empires-spil. Ideen...
Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...