opencv

Počítačové videnie - základy

Počítačové videnie - základy
Opencv (Open Source Computer Vision Library) je modul Python používaný pre počítačové videnie. OpenCV je bezplatný modul s otvoreným zdrojom, ktorý obsahuje stovky algoritmov na vykonávanie rôznych úloh. Pomocou OpenCV je možné vykonať všetko od rozpoznávania tváre po detekciu pohybu. V tejto príručke sa však pozrieme na základy OpenCV.

Najskôr si nainštalujeme OpenCV:

pip3 nainštalujte opencv-python

Čítanie a zobrazovanie obrázkov

Prvá vec, ktorú sa musíme naučiť, je čítať a písať obrázky. Čítanie obrazového súboru, zadanie úplnej cesty k súboru alebo názvu súboru (ak je súbor v priečinku python) a pridanie príznaku sa vykonáva pomocou cv2.imread (). Vlajka môže mať hodnotu 1 (pre farebný obrázok), 0 (pre stupnice šedej) alebo -1 (pre farebný obrázok s kanálmi). Jeden môže použiť cv2.funkcia imshow () na zobrazenie obrázka; tu sa odovzdajú dva argumenty - názov obrázka a obrázok, ktorý sa má zobraziť. Ďalej použijeme cv2.funkcia waitKey () na čakanie na vstup z klávesnice; a 0 pre cv2.Funkcia waitKey (0) znamená trvalé čakanie. Na druhej strane cv2.funkcia destruAllWindows () zavrie okná.

Toto načíta a otvorí obrázok a obrázok ponechá otvorený, kým ho nezatvoríte:

importovať cv2
obrázok = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('obrázok', obrázok)
cv2.waitKey (0)
cv2.destruAllWindows ()

Napíšte obrázky

Používame cv2.funkcia imwrite () na uloženie obrázka. Táto funkcia má dva parametre - názov na uloženie obrázka a obrázok, ktorý chcete uložiť.

importovať cv2
obrázok = cv2.imread ('identifikovať.jpg ', -1)
cv2.imwrite ('save_image.png ', obrázok)

Zachyťte video z webovej kamery

Pri zaznamenávaní videí začneme inicializáciou cv2.Funkcia VideoCapture (). Potom pokračujeme v snímaní pomocou slučky „while“. Aj keď užívateľ nestlačí kláves exit, môžeme načítať snímky a zobrazovať ich pomocou read () a cv2.funkcia imshow (). Potom sme vložili kláves „break“, aby sme ukončili slučku; v takom prípade je číslo 27 kľúčom ESC. Ak užívateľ stlačí kláves ESC, vymaní sa zo slučky. Akonáhle ste mimo slučky, je potrebné uvoľniť zachytenie.

importovať numpy ako np
importovať cv2
zachytenie = cv2.VideoCapture (0)
while (True):
ret, rám = zachytiť.čítať()
cv2.imshow ('rám', rám)
ak cv2.waitKey (1) & 0xFF == 27:
prestávka
zajať.uvoľniť ()
cv2.destruAllWindows ()

Prehrávanie video súboru

Prehrávanie videosúboru je ako zachytenie videa z webovej kamery. K tomu cv2.Je použitá funkcia VideoCapture (); k funkcii sa potom pridá názov videosúboru, ktorý chcete prehrať. Opäť sa použije slučka „while“ a klávesom ukončenia sa v tomto prípade zobrazí kláves „s“ na klávesnici. Toto otvorí a prehrá video súbor a zatvorí ho, keď používateľ stlačí kláves „s“.

importovať numpy ako np
importovať cv2
zachytenie = cv2.VideoCapture („Megamind.avi ")
while (True):
ret, rám = zachytiť.čítať()
cv2.imshow ('rám', rám)
ak cv2.waitKey (1) & 0xFF == ord ("s"):
prestávka
zajať.uvoľniť ()
cv2.destruAllWindows ()

Uloženie video súboru

Uloženie video súboru vyžaduje trochu viac práce. CV2.Funkcia VideoWriter () má celkovo 4 parametre - názov výstupného súboru, kód FourCC, počet snímok za sekundu a veľkosť rámca. Ďalej je potrebné určiť FourCC kód, ktorý je videokodekom využívajúcim cv2.Funkcia VideoWriter_fourcc (). Pomocou snímania.isOpened (), načítame rámec a zapíšeme výstupný rámec. Rámečky môžeme zobraziť aj pomocou cv2.funkcia imshow (). Potom použijeme cv2.waitKey (1) & 0xFF == ord ('s') na nastavenie klávesu ukončenia. V takom prípade, ak užívateľ stlačí klávesu „s“, opustí slučku a potom uvoľní snímanie a výstup a zatvorí okná.

importovať numpy ako np
importovať cv2
zachytenie = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* „XVID“)
výstup = cv2.VideoWriter ('výstup.avi ', fourcc, 30.0, (640 480))
zatiaľ čo (zachytiť.isOpened ()):
ret, rám = zachytiť.čítať()
výkon.zápis (rám)
cv2.imshow ('rám', rám)
ak cv2.waitKey (1) & 0xFF == ord ('s'):
prestávka
zajať.uvoľniť ()
výkon.uvoľniť ()
cv2.destruAllWindows ()

Kreslenie čiar, kruhov, obdĺžnikov a textov

Prvá vec, ktorú sa naučíme kresliť, je čiara. Na nakreslenie čiary jednoducho použijeme cv2.funkcia line (). Funkcia má 5 argumentov - zdrojové video, počiatočný bod, konečný bod, farbu a hrúbku čiary. V nasledujúcom prípade sme sa rozhodli nakresliť obdĺžnikový okraj (zložený zo 4 riadkov):

importovať cv2
zachytenie = cv2.VideoCapture ('vtest.avi ')
zatiaľ čo je pravda:
ret, rám = zachytiť.čítať()
šírka = int (zachytiť.dostať (3))
výška = int (zachytiť.dostať (4))
riadok1 = cv2.riadok (rám, (0,0), (0, výška), (255, 255, 255), 10)
line2 = cv2.riadok (riadok1, (0, 0), (šírka, 0), (255, 255, 255), 10)
riadok3 = cv2.riadok (riadok2, (0, výška), (šírka, výška), (255, 255, 255), 10)
riadok4 = cv2.riadok (riadok3, (šírka, 0), (šírka, výška), (255, 255, 255), 10)
cv2.imshow ('frame', line4)
ak cv2.waitKey (40) == ord ('q'):
prestávka
zajať.uvoľniť ()
cv2.destruAllWindows ()

Ďalej do videa nakreslíme kruh aj obdĺžnik. Na nakreslenie obdĺžnika použijeme cv2.obdĺžnik () funkcia, ktorá trvá 5 argumentov podobne ako riadok. Na nakreslenie kruhu použijeme funkciu cv2.circle (), ktorý tiež vyžaduje 5 argumentov - zdrojové video, stredový bod, polomer, farbu a hrúbku.

importovať cv2
zachytenie = cv2.VideoCapture ('vtest.avi ')
zatiaľ čo je pravda:
ret, rám = zachytiť.čítať()
šírka = int (zachytiť.dostať (3))
výška = int (zachytiť.dostať (4))
obdĺžnik = cv2.obdĺžnik (rám, (150, 15), (650, 550), (0,0,0), 11)
cv2.kruh (obdĺžnik, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('rám', rám)
ak cv2.waitKey (40) == ord ('q'):
prestávka
zajať.uvoľniť ()
cv2.destruAllWindows ()

Teraz pridajme k videu, ktoré máme, nejaký text. Aby sme to dosiahli, musíme určiť písmo; tu sme vybrali cv2.FONT_HERSHEY_SIMPLEX. Po výbere písma môžeme používať funkciu cv2.putText (), aby urobil zvyšok. Cv2.putText () má 8 argumentov - zdrojové video, text, ktorý chcete napísať, miesto, kam ho chcete mať, písmo, zväčšenie, farba, hrúbka a CV2.LINE_AA (vďaka čomu bude všetko vyzerať lepšie).

importovať cv2
zachytenie = cv2.VideoCapture ('vtest.avi ')
zatiaľ čo je pravda:
ret, rám = zachytiť.čítať()
šírka = int (zachytiť.dostať (3))
výška = int (zachytiť.dostať (4))
font = cv2.FONT_HERSHEY_SIMPLEX
obrázok = cv2.putText (rám, "VTEST.AVI ", (200, 200), písmo, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('rám', obrázok)
ak cv2.waitKey (40) == ord ('q'):
prestávka
zajať.uvoľniť ()
cv2.destruAllWindows ()

OpenCV je schopný mnohých skvelých vecí, kde človek musí niekde začať. Mohlo by sa učiť vytvárať a ukladať obrázky a videá. V tomto tutoriáli sme sa naučili robiť úplne základy počítačového videnia.

Šťastné kódovanie!

Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z najpopulárnejších obchodných simulačných hier. V tejto hre musíte vytvoriť úžasné dopravné podnikanie. Začnete však na začiatku ok...
Hry SuperTuxKart pre Linux
SuperTuxKart pre Linux
SuperTuxKart je vynikajúci titul navrhnutý tak, aby vám priniesol zážitok z hry Mario Kart zadarmo na vašom systéme Linux. Je to dosť náročné a zábavn...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
Battle for Wesnoth je jednou z najpopulárnejších open source strategických hier, ktoré si v súčasnosti môžete zahrať. Táto hra bola nielen vyvinutá ve...