opencv

Počítačové vidění - základy

Počítačové vidění - základy
Opencv (Open Source Computer Vision Library) je modul Pythonu používaný pro počítačové vidění. OpenCV je bezplatný modul s otevřeným zdrojovým kódem, který obsahuje stovky algoritmů pro provádění různých úkolů. Pomocí OpenCV lze provést cokoli od rozpoznávání tváře po detekci pohybu. V této příručce se však podíváme na základy OpenCV.

Nejprve si nainstalujte OpenCV:

pip3 nainstalujte opencv-python

Čtení a zobrazování obrázků

První věcí, kterou se musíme naučit, je číst a psát obrázky. Čtení obrazového souboru, zadání úplné cesty k souboru nebo názvu souboru (pokud je soubor ve složce python) a přidání příznaku se provádí pomocí cv2.imread (). Příznak může mít hodnotu 1 (pro barevný obrázek), 0 (pro stupně šedi) nebo -1 (pro barevný obrázek s kanály). Jeden může použít cv2.funkce imshow () pro zobrazení obrázku; zde jsou předány dva argumenty - název obrázku a obrázek, který se má zobrazit. Dále použijeme cv2.funkce waitKey () pro čekání na vstup z klávesnice; a 0 pro cv2.Funkce waitKey (0) znamená trvalou dobu čekání. Na druhou stranu cv2.funkce destruAllWindows () zavře okna.

Toto načte a otevře obrázek a ponechá obrázek otevřený, dokud jej nezavřete:

import cv2
obrázek = cv2.imread ('LinuxLogo.jpg ', 1)
cv2.imshow ('obrázek', obrázek)
cv2.waitKey (0)
cv2.destruAllWindows ()

Psát obrázky

Používáme CV2.funkce imwrite () pro uložení obrázku. Tato funkce má dva parametry - název pro uložení obrázku a obrázek, který chcete uložit.

import cv2
obrázek = cv2.imread ('identifikovat.jpg ', -1)
cv2.imwrite ('save_image.png ', obrázek)

Zachyťte video z webové kamery

Abychom mohli pořídit videa, začneme inicializací cv2.Funkce VideoCapture (). Potom používáme smyčku „while“ k dalšímu pořizování videa. Zatímco uživatel nestlačí klávesu exit, můžeme číst snímky a zobrazovat je pomocí read () a cv2.funkce imshow (). Poté jsme vložili klávesu „break“ pro opuštění smyčky; v tomto případě je číslo 27 klíč ESC. Pokud uživatel stiskne klávesu ESC, vymaní se ze smyčky. Jakmile jste mimo smyčku, je nutné uvolnit zachycení.

importovat numpy jako np
import cv2
capture = cv2.VideoCapture (0)
while (True):
ret, frame = zachycení.číst()
cv2.imshow ('rám', rám)
pokud cv2.waitKey (1) & 0xFF == 27:
přestávka
zajmout.uvolnění()
cv2.destruAllWindows ()

Přehrávání video souboru

Přehrávání videosouboru je jako pořizování videa z webové kamery. K tomu cv2.Je použita funkce VideoCapture (); do funkce se poté přidá název videosouboru, který chcete přehrát. Smyčka „while“ je znovu použita a klávesa exit je v tomto případě klávesou „s“ na klávesnici. Tím se otevře a přehraje video soubor a zavře se, když uživatel stiskne klávesu „s“.

importovat numpy jako np
import cv2
capture = cv2.VideoCapture („Megamind.avi ")
while (True):
ret, frame = zachycení.číst()
cv2.imshow ('rám', rám)
pokud cv2.waitKey (1) & 0xFF == ord ("s"):
přestávka
zajmout.uvolnění()
cv2.destruAllWindows ()

Uložení video souboru

Uložení videosouboru vyžaduje trochu více práce. CV2.Funkce VideoWriter () má celkem 4 parametry - název výstupního souboru, kód FourCC, počet snímků za sekundu a velikost snímku. Dále je třeba určit kód FourCC, což je video kodek využívající cv2.Funkce VideoWriter_fourcc (). Použití zachycení.isOpened (), čteme rámec a zapisujeme výstupní rámec. Můžeme také zobrazit rámečky pomocí cv2.funkce imshow (). Potom použijeme cv2.waitKey (1) & 0xFF == ord ('s') pro nastavení klávesy ukončení. V tomto případě, pokud uživatel stiskne klávesu „s“, opustí smyčku a poté uvolní zachycení a výstup a zavře okna.

importovat numpy jako np
import cv2
capture = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
výstup = cv2.VideoWriter ('výstup.avi ', fourcc, 30.0, (640 480))
while (zachytit.isOpened ()):
ret, frame = zachycení.číst()
výstup.zápis (rám)
cv2.imshow ('rám', rám)
pokud cv2.waitKey (1) & 0xFF == ord ('s'):
přestávka
zajmout.uvolnění()
výstup.uvolnění()
cv2.destruAllWindows ()

Kreslení čar, kruhů, obdélníků a textů

První věc, kterou se naučíme kreslit, je čára. K nakreslení čáry jednoduše použijeme cv2.funkce line (). Funkce přijímá 5 argumentů - zdrojové video, počáteční bod, koncový bod, barvu a tloušťku čáry. V následujícím případě jsme se rozhodli nakreslit obdélníkový okraj (tvořený 4 řádky):

import cv2
capture = cv2.VideoCapture ('vtest.avi ')
zatímco je pravda:
ret, frame = zachycení.číst()
width = int (zachycení.získat (3))
výška = int (zachycení.získat (4))
řádek1 = cv2.line (frame, (0,0), (0, height), (255, 255, 255), 10)
line2 = cv2.line (line1, (0, 0), (width, 0), (255, 255, 255), 10)
řádek3 = cv2.řádek (řádek2, (0, výška), (šířka, výška), (255, 255, 255), 10)
řádek4 = cv2.řádek (řádek3, (šířka, 0), (šířka, výška), (255, 255, 255), 10)
cv2.imshow ('frame', line4)
pokud cv2.waitKey (40) == ord ('q'):
přestávka
zajmout.uvolnění()
cv2.destruAllWindows ()

Dále do videa nakreslíme kruh i obdélník. K nakreslení obdélníku použijeme cv2.obdélník () funkce, která bere 5 argumentů podobně jako řádek. K nakreslení kruhu použijeme funkci cv2.circle (), který má také 5 argumentů - zdrojové video, střed, poloměr, barvu a tloušťku.

import cv2
capture = cv2.VideoCapture ('vtest.avi ')
zatímco je pravda:
ret, frame = zachycení.číst()
width = int (zachycení.získat (3))
výška = int (zachycení.získat (4))
obdélník = cv2.obdélník (rám, (150, 15), (650, 550), (0,0,0), 11)
cv2.kruh (obdélník, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('rám', rám)
pokud cv2.waitKey (40) == ord ('q'):
přestávka
zajmout.uvolnění()
cv2.destruAllWindows ()

Nyní přidejme text k videu, které máme. K tomu je třeba zadat písmo; zde jsme vybrali cv2.FONT_HERSHEY_SIMPLEX. Jakmile je písmo vybráno, můžeme použít funkci cv2.putText () za zbytek. CV2.putText () trvá 8 argumentů - zdrojové video, text, který chcete napsat, místo, kam chcete, písmo, zvětšení, barva, tloušťka a CV2.LINE_AA (díky čemuž vše vypadá lépe).

import cv2
capture = cv2.VideoCapture ('vtest.avi ')
zatímco je pravda:
ret, frame = zachycení.číst()
width = int (zachycení.získat (3))
výška = int (zachycení.získat (4))
font = cv2.FONT_HERSHEY_SIMPLEX
obrázek = cv2.putText (rám, "VTEST.AVI ", (200, 200), písmo, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('rám', obrázek)
pokud cv2.waitKey (40) == ord ('q'):
přestávka
zajmout.uvolnění()
cv2.destruAllWindows ()

OpenCV je schopen mnoha skvělých věcí, kde člověk musí někde začít. Mohlo by se učit vytvářet a ukládat obrázky a videa. V tomto tutoriálu jsme se naučili dělat úplně základy počítačového vidění.

Šťastné kódování!

Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...
Hry Jak zobrazit počítadlo FPS v linuxových hrách
Jak zobrazit počítadlo FPS v linuxových hrách
Hraní na Linuxu získalo velký tlak, když společnost Valve v roce 2012 oznámila podporu systému Linux pro klienta Steam a jejich hry. Od té doby se mno...
Hry Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Jak stáhnout a přehrát Sid Meier's Civilization VI v systému Linux
Úvod do hry Civilization 6 je moderní pojetí klasického konceptu představeného v sérii her Age of Empires. Myšlenka byla docela jednoduchá; začali bys...