opencv

Datorsyn Grunderna

Datorsyn Grunderna
Opencv (Open Source Computer Vision Library) är en Python-modul som används för datorsyn. OpenCV är en gratis öppen källkodsmodul som innehåller hundratals algoritmer för att utföra olika uppgifter. Allt från ansiktsigenkänning till rörelsedetektering kan göras med OpenCV. I den här guiden kommer vi dock att titta på grunderna i OpenCV.

Låt oss först installera OpenCV:

pip3 installera opencv-python

Läs och visa bilder

Det första vi behöver lära oss är att läsa och skriva bilder. Läsa en bildfil, mata in hela sökvägen till filen eller filnamnet (om filen finns i pythonmappen) och lägga till en flagga görs med cv2.imread (). Flaggan kan ta värdet 1 (för en färgbild), 0 (för gråskala) eller -1 (för färgbild med kanaler). Man kan använda cv2.imshow () funktion för att visa bilden; här skickas två argument - ett namn för bilden och bilden som ska visas. Därefter använder vi cv2.waitKey () -funktion för att vänta på tangentbordets inmatning; a 0 för cv2.waitKey (0) -funktionen innebär en permanent väntetid. Å andra sidan, cv2.destroyAllWindows () -funktionen stänger fönstren.

Detta kommer att läsa och öppna en bild och hålla bilden öppen tills du stänger den:

importera cv2
bild = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('bild', bild)
cv2.waitKey (0)
cv2.destroyAllWindows ()

Skriv bilder

Vi använder cv2.imwrite () -funktion för att spara en bild. Denna funktion tar två parametrar - ett namn för att spara bilden och bilden du vill spara.

importera cv2
bild = cv2.imread ('identifiera.jpg ', -1)
cv2.imwrite ('spara_bild.png ', bild)

Fånga video från webbkamera

För att fånga videor börjar vi med att initialisera cv2.VideoCapture () -funktion. Vi använder sedan en “while” -slinga för att fortsätta att spela in videon. Medan användaren inte trycker på exit-tangenten kan vi läsa ramarna och visa dem med read () och cv2.imshow () -funktion. Vi lägger sedan in en "break" -tangent för att lämna slingan; i detta fall är siffran 27 ESC-nyckeln. Om användaren trycker på ESC-tangenten bryter de ut från slingan. En gång ur slingan är det nödvändigt att släppa fångsten.

importera numpy som np
importera cv2
fånga = cv2.VideoCapture (0)
medan (True):
ret, ram = fånga.läsa()
cv2.imshow ('ram', ram)
om cv2.waitKey (1) & 0xFF == 27:
ha sönder
fånga.släpp()
cv2.destroyAllWindows ()

Spela upp en videofil

Att spela en videofil är som att fånga en video från en webbkamera. För att göra detta, cv2.VideoCapture () -funktionen används; namnet på videofilen du vill spela läggs sedan till i funktionen. "While" -slingan används igen, och exit-tangenten är i detta fall "s" -tangenten på tangentbordet. Detta öppnar och spelar upp videofilen och stänger den när användaren trycker på “s” -tangenten.

importera numpy som np
importera cv2
fånga = cv2.VideoCapture ("Megamind.avi ")
medan (True):
ret, ram = fånga.läsa()
cv2.imshow ('ram', ram)
om cv2.waitKey (1) & 0xFF == ord ("s"):
ha sönder
fånga.släpp()
cv2.destroyAllWindows ()

Spara en videofil

Att spara en videofil kräver lite mer arbete. Cv2.VideoWriter () -funktionen tar totalt fyra parametrar - utdatafilnamnet, FourCC-koden, antalet bilder per sekund och bildstorleken. Dessutom måste man ange FourCC-koden, som är videokodeken med cv2.VideoWriter_fourcc () -funktion. Använda fångsten.isOpened () läser vi ramen och skriver utramen. Vi kan också visa ramarna med cv2.imshow () -funktion. Sedan använder vi cv2.waitKey (1) & 0xFF == ord (s) för att ställa in en exit-tangent. I det här fallet, om användaren trycker på “s” -tangenten kommer de att lämna slingan och sedan släppa fångsten och utmatningen och stänger fönstren.

importera numpy som np
importera cv2
fånga = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
utgång = cv2.VideoWriter ('output.avi ', fourcc, 30.0, (640,480))
while (fånga.är öppnad()):
ret, ram = fånga.läsa()
produktion.skriv (ram)
cv2.imshow ('ram', ram)
om cv2.waitKey (1) & 0xFF == ord ('s'):
ha sönder
fånga.släpp()
produktion.släpp()
cv2.destroyAllWindows ()

Ritningslinjer, cirklar, rektanglar och texter

Det första vi kommer att lära oss att rita är en linje. För att rita en linje använder vi helt enkelt cv2.line () -funktion. Funktionen tar 5 argument - källvideon, startpunkten, slutpunkten, färgen och linjens tjocklek. I följande fall har vi beslutat att rita en rektangulär kant (bestående av fyra linjer):

importera cv2
fånga = cv2.VideoCapture ('vtest.avi ')
medan det är sant:
ret, ram = fånga.läsa()
bredd = int (fånga.få (3))
höjd = int (fånga.få (4))
linje1 = cv2.linje (ram, (0,0), (0, höjd), (255, 255, 255), 10)
linje2 = cv2.linje (rad 1, (0, 0), (bredd, 0), (255, 255, 255), 10)
line3 = cv2.linje (linje2, (0, höjd), (bredd, höjd), (255, 255, 255), 10)
line4 = cv2.linje (linje3, (bredd, 0), (bredd, höjd), (255, 255, 255), 10)
cv2.imshow ('ram', rad 4)
om cv2.waitKey (40) == ord ('q'):
ha sönder
fånga.släpp()
cv2.destroyAllWindows ()

Därefter ritar vi både en cirkel och en rektangel på videon. För att rita en rektangel använder vi cv2.rektangel () -funktion, som tar 5 argument ungefär som linjen. För att rita en cirkel använder vi funktionen cv2.cirkel (), som också tar 5 argument - källvideon, mittpunkten, radien, färgen och tjockleken.

importera cv2
fånga = cv2.VideoCapture ('vtest.avi ')
medan det är sant:
ret, ram = fånga.läsa()
bredd = int (fånga.få (3))
höjd = int (fånga.få (4))
rektangel = cv2.rektangel (ram, (150, 15), (650, 550), (0,0,0), 11)
cv2.cirkel (rektangel, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('ram', ram)
om cv2.waitKey (40) == ord ('q'):
ha sönder
fånga.släpp()
cv2.destroyAllWindows ()

Låt oss nu lägga till lite text till den video vi har. För att göra detta måste vi ange ett teckensnitt; här valde vi cv2.FONT_HERSHEY_SIMPLEX. När teckensnittet är valt kan vi använda funktionen cv2.putText () för att göra resten. Cv2.putText () tar 8 argument - källvideon, texten du vill skriva, positionen där du vill ha den, teckensnittet, förstoringen, färgen, tjockleken och cv2.LINE_AA (vilket gör att allt ser bättre ut).

importera cv2
fånga = cv2.VideoCapture ('vtest.avi ')
medan det är sant:
ret, ram = fånga.läsa()
bredd = int (fånga.få (3))
höjd = int (fånga.få (4))
font = cv2.FONT_HERSHEY_SIMPLEX
bild = cv2.putText (ram, "VTEST.AVI ", (200, 200), font, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('ram', bild)
om cv2.waitKey (40) == ord ('q'):
ha sönder
fånga.släpp()
cv2.destroyAllWindows ()

OpenCV kan många bra saker där man måste börja någonstans. Det kan vara att lära sig att skapa och spara bilder och videor. I den här handledningen lärde vi oss att göra grunderna i datorvision.

Glad kodning!

Mus Lägg till musgester i Windows 10 med dessa gratisverktyg
Lägg till musgester i Windows 10 med dessa gratisverktyg
Under senare år har datorer och operativsystem utvecklats kraftigt. Det fanns en tid då användare var tvungna att använda kommandon för att navigera g...
Mus Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Kontrollera och hantera musrörelser mellan flera skärmar i Windows 10
Dual Display Mouse Manager låter dig kontrollera och konfigurera musrörelser mellan flera skärmar genom att sakta ner dess rörelser nära gränsen. Wind...
Mus WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
WinMouse låter dig anpassa och förbättra muspekarens rörelse på Windows PC
Om du vill förbättra standardfunktionerna för din muspekare, använd freeware WinMouse. Det lägger till fler funktioner som hjälper dig att få ut det m...