opencv

Osnove računalne vizije

Osnove računalne vizije
Opencv (Open Source Computer Vision Library) je Python modul koji se koristi za računalni vid. OpenCV je besplatni modul otvorenog koda koji sadrži stotine algoritama za izvršavanje različitih zadataka. Sve se koristi od prepoznavanja lica do otkrivanja pokreta pomoću OpenCV-a. Međutim, u ovom ćemo vodiču pogledati osnove OpenCV-a.

Prvo, instalirajmo OpenCV:

pip3 instalirati opencv-python

Čitajte i prikazujte slike

Prvo što moramo naučiti je čitanje i pisanje slika. Čitanje slikovne datoteke, unos pune staze do datoteke ili imena datoteke (ako je datoteka u mapi python) i dodavanje zastavice vrši se pomoću cv2.nepročitano (). Zastavica može imati vrijednost 1 (za sliku u boji), 0 (za sive tonove) ili -1 (za sliku u boji s kanalima). Može se koristiti cv2.funkcija imshow () za prikaz slike; ovdje se prosljeđuju dva argumenta - naziv slike i slika koju treba prikazati. Dalje koristimo cv2.funkcija waitKey () za čekanje unosa s tipkovnice; a 0 za cv2.funkcija waitKey (0) podrazumijeva trajno vrijeme čekanja. S druge strane, cv2.unisellAllWindows () funkcija će zatvoriti prozore.

Ovo će očitati i otvoriti sliku i zadržati je otvorenom dok je ne zatvorite:

uvoz cv2
slika = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('slika', slika)
cv2.waitKey (0)
cv2.uništitiAllWindows ()

Napišite slike

Koristimo cv2.funkcija imwrite () za spremanje slike. Ova funkcija uzima dva parametra - naziv za spremanje slike i sliku koju želite spremiti.

uvoz cv2
slika = cv2.imread ('identificirati.jpg ', -1)
cv2.imwrite ('spremi_sliku.png ', slika)

Snimite video s web kamere

Za snimanje videozapisa započinjemo inicijalizacijom cv2.Funkcija VideoCapture (). Zatim koristimo petlju "while" za nastavak snimanja videozapisa. Iako korisnik ne pritisne tipku za izlaz, okvire možemo čitati i prikazivati ​​pomoću read () i cv2.funkcija imshow (). Zatim stavimo tipku "break" za izlaz iz petlje; u ovom je slučaju broj 27 ESC ključ. Ako korisnik pritisne ESC tipku, oni izbijaju iz petlje. Kad izađete iz petlje, potrebno je otpustiti hvatanje.

uvoz numpy kao np
uvoz cv2
hvatanje = cv2.VideoCapture (0)
while (True):
ret, frame = hvatanje.čitati()
cv2.imshow ('okvir', okvir)
ako je cv2.waitKey (1) & 0xFF == 27:
pauza
uhvatiti.otpustiti ()
cv2.uništitiAllWindows ()

Reprodukcija video datoteke

Reprodukcija video datoteke je poput snimanja videozapisa s web kamere. Da biste to učinili, cv2.Koristi se funkcija VideoCapture (); tada se funkciji dodaje naziv video datoteke koju želite reproducirati. Ponovno se koristi petlja „while“, a tipka za izlaz u ovom je slučaju tipka „s“ na tipkovnici. Ovo će otvoriti i reproducirati video datoteku i zatvoriti je kada korisnik pritisne tipku "s".

uvoz numpy kao np
uvoz cv2
hvatanje = cv2.VideoCapture ("Megamind.avi ")
while (True):
ret, frame = hvatanje.čitati()
cv2.imshow ('okvir', okvir)
ako je cv2.waitKey (1) & 0xFF == ord ("s"):
pauza
uhvatiti.otpustiti ()
cv2.uništitiAllWindows ()

Spremanje video datoteke

Spremanje video datoteke zahtijeva malo više posla. Cv2.Funkcija VideoWriter () uzima ukupno 4 parametra - naziv izlazne datoteke, FourCC kôd, broj sličica u sekundi i veličinu okvira. Nadalje, mora se navesti FourCC kod, koji je video kodek koji koristi cv2.Funkcija VideoWriter_fourcc (). Koristeći hvatanje.isOpened (), čitamo okvir i zapisujemo izlazni okvir. Okvire možemo prikazati i pomoću cv2.funkcija imshow (). Zatim koristimo cv2.waitKey (1) & 0xFF == ord ('s') za postavljanje izlazne tipke. U ovom slučaju, ako korisnik pritisne tipku “s”, izaći će iz petlje, a zatim otpustiti hvatanje i izlaz te zatvoriti prozore.

uvoz numpy kao np
uvoz cv2
hvatanje = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
izlaz = cv2.VideoWriter ('izlaz.avi ', četiri kubika, 30.0, (640.480))
dok (hvatanje.isOpened ()):
ret, frame = hvatanje.čitati()
izlaz.zapis (okvir)
cv2.imshow ('okvir', okvir)
ako je cv2.waitKey (1) & 0xFF == ord ('s'):
pauza
uhvatiti.otpustiti ()
izlaz.otpustiti ()
cv2.uništitiAllWindows ()

Crtanje linija, krugova, pravokutnika i tekstova

Prvo što ćemo naučiti crtati je crta. Za crtanje crte jednostavno koristimo cv2.linija () funkcija. Funkcija uzima 5 argumenata - izvorni video, početnu točku, završnu točku, boju i debljinu linije. U sljedećem smo slučaju odlučili nacrtati pravokutni obrub (sastavljen od 4 linije):

uvoz cv2
hvatanje = cv2.VideoCapture ('vtest.avi ')
dok je Istina:
ret, frame = hvatanje.čitati()
širina = int (hvatanje.dobiti (3))
visina = int (hvatanje.dobiti (4))
linija1 = cv2.crta (okvir, (0,0), (0, visina), (255, 255, 255), 10)
linija2 = cv2.linija (linija1, (0, 0), (širina, 0), (255, 255, 255), 10)
linija3 = cv2.linija (linija2, (0, visina), (širina, visina), (255, 255, 255), 10)
linija4 = cv2.linija (linija3, (širina, 0), (širina, visina), (255, 255, 255), 10)
cv2.imshow ('okvir', redak4)
ako je cv2.waitKey (40) == ord ('q'):
pauza
uhvatiti.otpustiti ()
cv2.uništitiAllWindows ()

Zatim ćemo na videozapisu nacrtati i krug i pravokutnik. Za crtanje pravokutnika koristimo cv2.pravokutnik () funkcija, koja uzima 5 argumenata slično liniji. Za crtanje kruga koristimo funkciju cv2.circle (), koji također uzima 5 argumenata - izvorni video, središnja točka, radijus, boja i debljina.

uvoz cv2
hvatanje = cv2.VideoCapture ('vtest.avi ')
dok je Istina:
ret, frame = hvatanje.čitati()
širina = int (hvatanje.dobiti (3))
visina = int (hvatanje.dobiti (4))
pravokutnik = cv2.pravokutnik (okvir, (150, 15), (650, 550), (0,0,0), 11)
cv2.krug (pravokutnik, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('okvir', okvir)
ako je cv2.waitKey (40) == ord ('q'):
pauza
uhvatiti.otpustiti ()
cv2.uništitiAllWindows ()

Sad, dodajmo malo teksta u video zapis koji imamo. Da bismo to učinili, moramo navesti font; ovdje smo odabrali cv2.FONT_HERSHEY_SIMPLEX. Nakon što odaberemo font, možemo koristiti funkciju cv2.putText () da odradi ostalo. Cv2.putText () uzima 8 argumenata - izvorni videozapis, tekst koji želite napisati, položaj na kojem želite, font, povećanje, boja, debljina i cv2.LINE_AA (zbog čega sve izgleda bolje).

uvoz cv2
hvatanje = cv2.VideoCapture ('vtest.avi ')
dok je Istina:
ret, frame = hvatanje.čitati()
širina = int (hvatanje.dobiti (3))
visina = int (hvatanje.dobiti (4))
font = cv2.FONT_HERSHEY_SIMPLEX
slika = cv2.putText (okvir, "VTEST.AVI ", (200, 200), font, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('okvir', slika)
ako je cv2.waitKey (40) == ord ('q'):
pauza
uhvatiti.otpustiti ()
cv2.uništitiAllWindows ()

OpenCV je sposoban za mnoge velike stvari u kojima se mora negdje započeti. To bi moglo biti učenje stvaranja i spremanja slika i videozapisa. U ovom uputstvu naučili smo raditi osnove računalnog vida.

Sretno kodiranje!

Luke komercijalnih igara s otvorenim kodom
Besplatne igre s otvorenim kodom i više platformi mogu se koristiti za igranje starih, kao i nekih prilično nedavnih naslova igara. U ovom će se člank...
Najbolje igre naredbenog retka za Linux
Naredbeni redak nije samo vaš najveći saveznik pri korištenju Linuxa - on također može biti izvor zabave jer ga možete koristiti za igranje mnogih zab...
Najbolje aplikacije za mapiranje gamepada za Linux
Ako volite igrati igre na Linuxu s gamepadom umjesto tipičnim sustavom za unos tipkovnice i miša, za vas postoji nekoliko korisnih aplikacija. Mnoge r...