Låt oss först installera OpenCV:
pip3 installera opencv-pythonLä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 cv2bild = 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 cv2bild = 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 npimportera 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 npimportera 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 npimportera 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 cv2få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 cv2få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 cv2få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!