opencv

Számítógépes látás az alapok

Számítógépes látás az alapok
Az Opencv (Open Source Computer Vision Library) egy Python modul, amelyet számítógépes látáshoz használnak. Az OpenCV egy ingyenes, nyílt forráskódú modul, amely több száz algoritmust tartalmaz különböző feladatok végrehajtására. Az arcfelismeréstől a mozgásérzékelésig bármi elvégezhető az OpenCV használatával. Ebben az útmutatóban azonban megvizsgáljuk az OpenCV alapjait.

Először telepítsük az OpenCV-t:

pip3 telepítse az opencv-python programot

Képek olvasása és megjelenítése

Az első dolog, amit meg kell tanulnunk, az a képek olvasása és írása. Képfájl olvasása, a fájl teljes elérési útjának vagy a fájlnév megadása (ha a fájl a python mappában van), és egy zászló hozzáadása a cv2 használatával történik.imread (). A zászló értéke 1 (színes kép esetén), 0 (szürkeárnyalatos) vagy -1 (csatornás színes kép esetén). Használható a cv2.imshow () függvény a kép megjelenítéséhez; itt két érvet adunk át - a kép nevét és a megjelenítendő képet. Ezután a cv2-t használjuk.waitKey () függvény a billentyűzet bevitelének megvárására; a 0 a cv2 esetén.waitKey (0) függvény állandó várakozási időt jelent. Viszont a cv2.A destrAllWindows () függvény bezárja az ablakokat.

Ez elolvassa és megnyitja a képet, és nyitva tartja a képet, amíg bezárja:

import cv2
kép = cv2.imread ('LinuxLogo.JPG ”, 1)
cv2.imshow ('kép', kép)
cv2.waitKey (0)
cv2.destrAllWindows ()

Képek írása

A cv2-t használjuk.imwrite () funkció a kép mentéséhez. Ennek a funkciónak két paramétere van - egy név a kép mentéséhez és a menteni kívánt kép.

import cv2
kép = cv2.imread ('azonosít.JPG ', -1)
cv2.imwrite ('save_image.png ', kép)

Videó rögzítése webkameráról

Videók rögzítéséhez először a cv2 inicializálásával kezdjük.VideoCapture () funkció. Ezután egy „while” hurok segítségével folytatjuk a videó rögzítését. Míg a felhasználó nem nyomja meg a kilépés gombot, a kereteket elolvashatjuk és megjeleníthetjük a read () és a cv2 segítségével.imshow () függvény. Ezután beleteszünk egy „break” billentyűt a hurokból való kilépéshez; ebben az esetben a 27-es szám az ESC-kulcs. Ha a felhasználó megnyomja az ESC gombot, kitör a hurokból. A hurokból való kilépés után el kell engedni a rögzítést.

importálja a számot, mint np
import cv2
elfog = cv2.VideoCapture (0)
míg (Igaz):
ret, frame = elfog.olvas()
cv2.imshow ('keret', keret)
ha cv2.waitKey (1) & 0xFF == 27:
szünet
elfog.kiadás()
cv2.destrAllWindows ()

Videofájl lejátszása

Videofájl lejátszása olyan, mint egy videó rögzítése webkameráról. Ehhez a cv2.A VideoCapture () függvényt használják; A lejátszani kívánt videofájl neve hozzáadódik a funkcióhoz. A „while” ciklust újra használjuk, és ebben az esetben a kilépési kulcs a billentyűzet “s” gombja. Ez megnyitja és lejátszja a videofájlt, és bezárja, amikor a felhasználó megnyomja az „s” gombot.

importálja a numpy-t np-ként
import cv2
elfog = cv2.VideoCapture ("Megamind.avi ")
míg (Igaz):
ret, frame = elfog.olvas()
cv2.imshow ('keret', keret)
ha cv2.waitKey (1) & 0xFF == ord ("s"):
szünet
elfog.kiadás()
cv2.destrAllWindows ()

Videofájl mentése

A videofájl mentése kicsit több munkát igényel. A cv2.A VideoWriter () függvény összesen 4 paramétert vesz fel - a kimeneti fájl nevét, a FourCC kódot, a képkocka másodpercenkénti számát és a képméretet. Továbbá meg kell adni a FourCC kódot, amely a cv2-t használó videokodek.VideoWriter_fourcc () függvény. A rögzítés használata.isOpened (), elolvassuk a keretet és megírjuk a kimeneti keretet. A kereteket a cv2 segítségével is megmutathatjuk.imshow () függvény. Ezután a cv2-t használjuk.waitKey (1) & 0xFF == ord ('s') a kilépési kulcs beállításához. Ebben az esetben, ha a felhasználó megnyomja az „s” gombot, kilép a ciklusból, majd felszabadítja a rögzítést és a kimenetet, és bezárja az ablakokat.

importálja a numpy-t np-ként
import cv2
elfog = cv2.VideoCapture (0)
fourcc = cv2.VideoWriter_fourcc (* 'XVID')
kimenet = cv2.VideoWriter ('kimenet.avi ', négy köbcentis, 30.0, (640,480))
míg (elfog.isOpened ():
ret, frame = elfog.olvas()
Kimenet.ír (keret)
cv2.imshow ('keret', keret)
ha cv2.waitKey (1) & 0xFF == ord ('s'):
szünet
elfog.kiadás()
Kimenet.kiadás()
cv2.destrAllWindows ()

Vonalak, körök, téglalapok és szövegek rajzolása

Az első dolog, amit megtanulunk rajzolni, egy vonal. Vonal megrajzolásához egyszerűen a cv2-t használjuk.line () függvény. A függvény 5 argumentumot vesz fel - a forrásvideót, a kezdőpontot, a végpontot, a színt és a vonal vastagságát. A következő esetben úgy döntöttünk, hogy megrajzolunk egy téglalap alakú (4 vonalból álló) szegélyt:

import cv2
elfog = cv2.VideoCapture ('vtest.avi ')
míg True:
ret, frame = elfog.olvas()
szélesség = int (elfogás.kap (3))
magasság = int (elfogás.kap (4))
line1 = cv2.vonal (keret, (0,0), (0, magasság), (255, 255, 255), 10)
2. sor = cv2.vonal (1. sor, (0, 0), (szélesség, 0), (255, 255, 255), 10)
3. sor = cv2.vonal (2. sor, (0, magasság), (szélesség, magasság), (255, 255, 255), 10)
4. sor = cv2.vonal (3. sor, (szélesség, 0), (szélesség, magasság), (255, 255, 255), 10)
cv2.imshow ('keret', 4. sor)
ha cv2.waitKey (40) == ord ('q'):
szünet
elfog.kiadás()
cv2.destrAllWindows ()

Ezután kört és téglalapot is rajzolunk a videóra. Téglalap rajzolásához a cv2-t használjuk.rectangle () függvény, amely 5 argumentumot vesz fel, hasonlóan a vonalhoz. Kör rajzolásához a cv2 függvényt használjuk.kör (), amely szintén 5 argumentumot vesz fel - a forrás videó, a középpont, a sugár, a szín és a vastagság.

import cv2
elfog = cv2.VideoCapture ('vtest.avi ')
míg True:
ret, frame = elfog.olvas()
szélesség = int (elfogás.kap (3))
magasság = int (elfogás.kap (4))
téglalap = cv2.téglalap (keret, (150, 15), (650, 550), (0,0,0), 11)
cv2.kör (téglalap, (250, 250), 60, (0,0,0), 11)
cv2.imshow ('keret', keret)
ha cv2.waitKey (40) == ord ('q'):
szünet
elfog.kiadás()
cv2.destrAllWindows ()

Tegyünk hozzá néhány szöveget a videóhoz. Ehhez meg kell adnunk egy betűtípust; itt a cv2-t választottuk.FONT_HERSHEY_SIMPLEX. A betűtípus kiválasztása után használhatjuk a cv2 függvényt.putText () a többihez. Cv2.A putText () 8 argumentumot vesz fel - a forrásvideót, az írni kívánt szöveget, a kívánt helyet, a betűtípust, a nagyítást, a színt, a vastagságot és a cv2-t.LINE_AA (amitől minden jobban néz ki).

import cv2
elfog = cv2.VideoCapture ('vtest.avi ')
míg True:
ret, frame = elfog.olvas()
szélesség = int (elfogás.kap (3))
magasság = int (elfogás.kap (4))
font = cv2.FONT_HERSHEY_SIMPLEX
kép = cv2.putText (keret, "VTEST.AVI ", (200, 200), betűtípus, 4, (0,0,0), 5, cv2.LINE_AA)
cv2.imshow ('keret', kép)
ha cv2.waitKey (40) == ord ('q'):
szünet
elfog.kiadás()
cv2.destrAllWindows ()

Az OpenCV sok nagy dologra képes, ahol valahol el kell kezdeni. Megtanulhat képeket és videókat létrehozni és menteni. Ebben az oktatóanyagban megtanultuk elvégezni a számítógépes látás alapjait.

Boldog kódolás!

Csata a Wesnoth bemutatóért
A Battle for Wesnoth az egyik legnépszerűbb nyílt forráskódú stratégiai játék, amelyet jelenleg játszhatsz. Ez a játék nem csak nagyon hosszú ideje fe...
0 A.D. Bemutató
A sok stratégiai játék közül 0 A.D. átfogó címként és nagyon mély, taktikus játékként képes kiemelkednie annak ellenére, hogy nyílt forráskódú. A játé...
Unity3D bemutató
Bevezetés a Unity 3D-be Az Unity 3D egy erőteljes játékfejlesztő motor. Ez több platformon keresztül lehetővé teszi játékok, mobil, webes, asztali és ...