- 1. Bitové operácie a maskovanie
- 2. Konvolúcia a rozmazanie
- 3. Zaostrenie - obrátenie obrazu rozostrí
- 4. Threshoding (binarizácia)
- 5. Dilatácia, erózia, otváranie / zatváranie
- 6. Detekcia okrajov a prechody obrázkov
- 14. Perspektívna a afinná transformácia
- 8. Aplikácia Live Sketch
V predchádzajúcich tutoriáloch sme sa naučili niečo o OpenCV a vykonali sme základné spracovanie obrazu. Potom sme v ďalšom tutoriáli vykonali manipuláciu s obrázkami v OpenCV, ako je orezanie, rotácia, transformácia obrazu atď. Takže v pokračovaní predchádzajúceho tutoriálu Manipulácia s obrázkom sa tu dozvieme niekoľko ďalších techník manipulácie s obrázkami a na konci tutoriálu zostavíme program python-opencv na vytvorenie živého náčrtu zo živého prenosu webovej kamery. Táto aplikácia bude využívať veľa funkcií spracovania obrazu, ktoré sme sa doteraz naučili alebo sa naučíme v tomto návode, takže to bude dobrý praktický príklad na pokrytie všetkých funkcií.
Ako bolo uvedené v predchádzajúcom tutoriáli, OpenCV je Open Source Commuter Vision Library, ktorá má rozhranie C ++, Python a Java a podporuje Windows, Linux, Mac OS, iOS a Android. Dá sa teda ľahko nainštalovať na Raspberry Pi s prostredím Python a Linux. A Raspberry Pi s OpenCV a pripojenou kamerou možno použiť na vytvorenie mnohých aplikácií na spracovanie obrazu v reálnom čase, ako je detekcia tváre, zámok tváre, sledovanie objektov, detekcia ŠPZ automobilov, domáci bezpečnostný systém atď.
V tomto tutoriáli uvidíme ďalšie manipulácie s obrázkami pomocou Python OpenCV. Tu sa naučíme aplikovať na obrázok nasledujúcu funkciu pomocou Python OpenCV:
- Bitové operácie a maskovanie
- Konvolúcia a rozmazanie
- Zaostrenie - obrátenie obrazu sa rozostrí
- Prahové hodnoty (binarizácia)
- Dilatácia, erózia, otváranie / zatváranie
- Detekcia okrajov a prechody obrázkov
- Perspektíva a afinita
- Aplikácia Live Sketch
1. Bitové operácie a maskovanie
Bitové operácie vám pomôžu pri maskovaní obrázkov a pomôžu vám vytvoriť niekoľko jednoduchých obrázkov.
Tvorba štvorca
import cv2 import numpy ako np #používame iba dve dimenzie, pretože toto je obrázok v šedej škále , ak by sme používali # farebný obrázok, potom sme použili obdĺžnik = np.zeros ((300,300,3), np.uint8) # Vytvorenie štvorcového štvorca = np.zeros ((300 300), np.uint8) cv2.rectangle (štvorec, (50,50), (250 250), 255, -1) cv2.imshow ("štvorec", štvorec) cv2. waitKey (0)
Výroba elipsy
elipsa = np.zeros ((300 300), np.uint8) cv2.ellipse (elipsa, (150,150), (150,150), 30,0 180,255, -1) cv2.imshow ("elipsa", elipsa) cv2.waitKey (0)
Experimentovanie s bitovými operáciami
#AND_zobrazuje sa iba tam, kde sa tieto dva pretínajú
BitwiseAND = cv2.bitwise_and (štvorec, elipsa) cv2.imshow ("AND", BitwiseAND) cv2.waitKey (0)
#OR_zobrazuje sa iba tam, kde je štvorec alebo elipsa
BitwiseOR = cv2.bitwise_or (square, ellipse) cv2.imshow ("OR", BitwiseOR) cv2.waitKey (0)
#XOR_shows iba tam, kde jeden z nich existuje sám
BitwiseXOR = cv2.bitwise_xor (štvorec, elipsa) cv2.imshow ("XOR", BitwiseXOR) cv2.waitKey (0)
# NIE_Ukazuje všetko, čo nie je súčasťou elipsy a operácia NIE sa dá použiť iba na jednu figúru
BitwiseNOT_elp = cv2.bitwise_not (elipsa) cv2.imshow ("NOT_ellipse", BitwiseNOT_elp) cv2.waitKey (0) cv2.destroyAllWindows ()
2. Konvolúcia a rozmazanie
Konvolúcie je matematická operácia vykonaná na dvoch funkcií produkujúcich tretiu funkciu, ktorá je spravidla modifikovanou verziou pôvodnú funkciu.
Výstupný obrázok = obrázok Funkcia Veľkosť jadra
V počítačovom videní používame jadrá na určenie veľkosti, nad ktorou spustíme našu manipulačnú funkciu nad našim obrazom.
Rozmazanie je operácia, pri ktorej spriemerujeme pixely v rámci oblasti (jadro)
OpenCV rozmazáva obraz pomocou jadier, jadro vám povie, ako zmeniť hodnotu ľubovoľného daného pixelu kombináciou s rôznym počtom susedných pixelov, ktoré sa jadro použije na každý pixel v obraze jeden po druhom, čím sa vytvorí výsledný obraz.
Jednoducho povedané, konvolúcia obrazu je jednoducho elementárne násobenie dvoch matíc, za ktorým nasleduje súčet.
Môžeme to jednoducho pochopiť podľa nasledujúceho príkladu.
Vyššie uvedené je jadro 3X3.
Na normalizáciu sa vynásobíme 1/25, tj súčet na 1 sme zvyšovali alebo znižovali intenzitu ako v prípade zosvetlenia alebo stmavenia obrázkov.
Vyskúšajme metódu rozmazania opencv filter2D, danú funkciou cv2.filter2D (obrázok, -1, jadro)
import cv2 import numpy ako np image = cv2.imread ('elephant.jpg') cv2.imshow ('original', obrázok) cv2.waitKey (0)
# vytvorenie matice jadra 3x3
kernel_3x3 = np.ones ((3,3), np.float32) / 9
# používame cv2.filter2D na spojenie jadra s obrázkom
rozmazané = cv2.filter2D (obrázok, -1, jadro_3x3) cv2.imshow ('3x3_blurring', rozmazané) cv2.waitKey (0)
#vytvorenie matice jadra 7x7
kernel_7x7 = np.ones ((7,7), np.float32) / 49
# používame cv2.filter2D na spojenie jadra s obrázkom
rozmazané = cv2.filter2D (obrázok, -1, kernel_7x7) cv2.imshow ('7x7_blurring', rozmazané) cv2.waitKey (0) cv2.destroyAllWindows ()
Existujú aj ďalšie typy metód rozmazania:
cv2.blur - Priemeruje hodnotu v určenom okne.
cv2.GaussianBlur - Podobné, ale používa gaussovské okno (väčší dôraz sa kladie na body okolo stredu).
cv2.medianBlur– Používa strednú hodnotu všetkých prvkov v okne.
cv2.bilateralFilter– Rozostrí sa, pričom sa udržia ostré hrany, zachovajú sa hrany a detaily čiar.
Uvidíme jeden po druhom nižšie, najskôr zobrazíme pôvodný obrázok pomocou nižšie uvedeného kódu:
import cv2 import numpy ako np image = cv2.imread ('elephant.jpg') cv2.imshow ('original', obrázok) cv2.waitKey (0)
cv2.blur:
Pri tejto metóde sa priemerovanie vykonáva spojením obrazu s normalizovaným filtrom poľa, ktorý zaujme miesto pod rámčekom a nahradí centrálny prvok. Tu musí byť veľkosť políčka nepárna a kladná .
# cv2.blur blur = cv2.blur (obrázok, (3,3)) cv2.imshow ('Priemerovanie', rozmazanie) cv2.waitKey (0)
cv2.Gaussian Blur:
# cv2.GaussianBlur #pri box boxe, skúsme gaussovské jadro Gaussian = cv2.GaussianBlur (obrázok, (7,7), 0) cv2.imshow ('Gaussian blurring', Gaussian) cv2.waitKey (0)
cv2.medianBlur:
Trvá to medián všetkých pixelov pod oblasťou jadra a centrálny prvok sa nahradí touto strednou hodnotou.
# cv2.medianBlur # zaberie strednú hodnotu všetkých pixelov pod oblasťou jadra a centrálny prvok # sa nahradí touto strednou hodnotou. stredná hodnota = cv2.medianBlur (obrázok 5) cv2.imshow ('medián rozmazanie', medián) cv2.waitKey (0)
cv2.bilateralFilter:
Obojstranný je veľmi efektívny pri odstraňovaní šumu pri zachovaní ostrých hrán
# cv2.bilaterálnyFilter #Bilaterálny je veľmi efektívny pri odstraňovaní šumu pri zachovaní ostrých hrán bilaterálnych = cv2.bilateralFilter (obrázok, 9,75,75) cv2.imshow ('bilaterálne rozmazanie', bilaterálny) cv2.waitKey (0) cv2. destruAllWindows ()
Obrázok Bez šumu - nie Miestne znamená Odšumenie
import cv2 import numpy ako np image = cv2.imread ('elephant.jpg') cv2.imshow ('original', obrázok) cv2.waitKey (0)
#parameter po None je sila filtra 'h' (5-10 je dobrý rozsah) #ďalší je h pre farebné komponenty, opäť nastaviť rovnakú hodnotu ako h
dst = cv2.fastNlMeansDenoisingColored (obrázok, žiadny, 6,6,7,21) cv2.imshow ('Fast means denois', dst) cv2.waitKey (0) cv2.destroyAllWindows ()
Existujú 4 variácie nemiestnych prostriedkov na potlačenie šumu
cv2.fastNlMeansDenoising () - pre jeden obrázok v škále šedej
cv2.fastNlMeansDenoisingColored () - jednofarebný obrázok
cv2.fastNlmeansDenoisingMulti () - pre stupne šedej v poradí obrázkov
cv2.fastNlmeansDenoisingcoloredMulti () - pre farebnú sekvenciu obrázkov
3. Zaostrenie - obrátenie obrazu rozostrí
Zaostrenie je opakom rozmazania, zosilňuje alebo zdôrazňuje okraje obrazu.
Jadro =,,
Súčet našich matíc jadra je jeden, takže nie je potrebné normalizovať (tj vynásobiť faktorom rovnakú jasnosť ako pôvodná), ak nie je jadro normalizované na 1, obraz by bol jasnejší alebo tmavší.
import cv2 import numpy ako np image = cv2.imread ('elephant.jpg') cv2.imshow ('original', obrázok) cv2.waitKey (0)
kernel_sharpening = np.array (,
])
# nanesenie ostrenia jadra na vstupný obrázok
zostrený = cv2.filter2D (obrázok, -1, kernel_sharpening) cv2.imshow ('zaostrený obrázok', zaostrený) cv2.waitKey (0) cv2.destroyAllWindows ()
4. Threshoding (binarizácia)
Prahová hodnota je akt prevodu obrazu do binárnej formy. V opencv je samostatná funkcia pre prahovanie definované ako
Cv2.threshold (obrázok, prahová hodnota, maximálna hodnota, typ prahovej hodnoty)
Existujú nasledujúce typy prahových hodnôt:
- cv2.THRESH_BINARY - najbežnejšie
- cv2. THRESH_BINARY_INV - najbežnejšie
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2. THRESH_TOZERO_INV
POZNÁMKA: pred stanovením prahovej hodnoty je potrebné obrázok previesť do odtieňov šedej
import cv2 import numpy ako np # načítanie obrázka ako odtiene šedej obrázok = cv2.imread ('gradient.jpg', 0) cv2.imshow ('pôvodný', obrázok) cv2.waitKey (0)
#hodnota pod 127 prechod na 0 (čierna) a nad 127 nad hodnotu 255 (biela)
_, thresh1 = cv2.threshold (obrázok, 127 255, cv2.THRESH_BINARY) cv2.imshow ('1 threshold', thresh1) cv2.waitKey (0)
# hodnota pod 127 ide na 255 a hodnoty nad 127 na 0 (zadná strana vyššie)
_, thresh2 = cv2.threshold (obrázok, 127 255, cv2.THRESH_BINARY_INV) cv2.imshow ('2 threshold', thresh2) cv2.waitKey (0)
#hodnota nad 127 je skrátená (zadržaná) na 127, argument 255 je nepoužitý.
_, thresh3 = cv2.threshold (obrázok, 127 255, cv2.THRESH_TRUNC) cv2.imshow ('3 thresh trunc', thresh3) cv2.waitKey (0)
#hodnoty pod 127 idú na 0, nad 127 sa nemení
_, thresh4 = cv2.threshold (obrázok, 127 255, cv2.THRESH_TOZERO) cv2.imshow ('4 threshold', thresh4) cv2.waitKey (0)
#Revesrse vyššie, pod 127 sa nezmení, nad 127 sa vynuluje
_, thresh5 = cv2.threshold (obrázok, 127 255, cv2.THRESH_TOZERO_INV) cv2.imshow ('5 threshold', thresh5) cv2.waitKey (0) cv2.destroyAllWindows ()
5. Dilatácia, erózia, otváranie / zatváranie
Jedná sa o operácie v oblasti matematickej morfológie
Dilatácia - pridáva pixely k hraniciam objektu v obraze.
Erozia - Odstráni pixely na hranici objektu v obraze.
Otvorenie - Erozia, po ktorej nasleduje rozšírenie.
Uzavretie - rozšírenie, po ktorom nasleduje erózia.
Otváranie je veľmi užitočné na potlačenie obrazu, pretože najskôr zriedi obraz eróziou (odstráni šum) a potom ho rozšíri.
Zmätok s dilatáciou a eróziou
Medzi obrázkami s bielym pozadím a dilatáciou býva niekedy nejasnosť, pretože program opencv považuje biele pozadie za obrázok, ktorý sa namiesto pôvodného obrázka rozšíri alebo eroduje, takže v takom prípade funguje erózia ako dilatácia a naopak, ako to ukazuje ukážka obrázka. zobrazené nižšie.
Pamätajte, že dilatácia pridá pixely na hranice objektov v obraze, zatiaľ čo erózia odstráni pixely na hraniciach objektov v obraze
import cv2 import numpy ako np obrázok = cv2.imread ('imagecv.png', 0) cv2.imshow ('pôvodný', obrázok) cv2.waitKey (0)
#Erozia
# definujme si veľkosť nášho jadra
jadro = np.ones ((5,5), np.uint8)
#teraz erodujeme obrázok, tu nie je čas, aby ste ho erodovali
erózia = cv2.erode (obrázok, jadro, iterácie = 1) cv2.imshow ('Erozia', erózia) cv2.waitKey (0)
#rozšírenie
dilatácia = cv2.dilate (obrázok, jadro, iterácie = 1) cv2.imshow ('rozšírenie', rozšírenie) cv2.waitKey (0)
# otvorenie, Dobré na odstránenie hluku
opening = cv2.morphologyEx (obrázok, cv2.MORPH_OPEN, jadro) cv2.imshow ('otvorenie', otvorenie) cv2.waitKey (0)
#closing, Dobré na odstránenie hluku
záverečné = cv2.morphologyEx (obrázok, cv2.MORPH_CLOSE, jadro) cv2.imshow ('záverečné', záverečné) cv2.waitKey (0) cv2.destroyAllWindows ()
6. Detekcia okrajov a prechody obrázkov
Detekcia okrajov je veľmi dôležitou oblasťou v počítačovom videní, najmä keď sa jedná o kontúry.
Okraje možno definovať ako hranice obrázka, v skutočnosti sú to hrany, ktoré definujú objekt v obrázkoch, a zachovávajú tak množstvo informácií o obrázku.
Formálne hrany možno definovať ako náhle zmeny (diskontinuity) v obraze a môžu kódovať toľko informácií ako pixely.
Vyššie uvedený obrázok ukazuje, ako počítačové videnie identifikuje a rozpoznáva obraz.
Algoritmy detekcie okrajov: - Existujú tri hlavné typy algoritmov detekcie okrajov
- Sobel - zdôraznenie vertikálnych alebo horizontálnych obrázkov.
- Laplacián - optimálne z dôvodu nízkej chybovosti, dobre definovaných hrán a presnej detekcie.
- Algoritmus detekcie Canny Edge (vyvinutý Johnom F. Cannym v roku 1986)
1. Aplikuje Gaussovo rozostrenie
2. Nájde gradient intenzity obrazu
3. aplikuje nie maximálne potlačenie (tj odstráni pixely, ktoré nie sú hranami).
4. Hysterézia aplikuje prah (tj. Ak je pixel v hornom a dolnom prahu, považuje sa to za hranu)
import cv2 import numpy ako np image = cv2.imread ('input.jpg', 0) výška, šírka = image.shape
#sobel
#extrahovanie okrajov
sobel_x = cv2.Sobel (obrázok, cv2.CV_64F, 0,1, ksize = 5) sobel_y = cv2.Sobel (obrázok, cv2.CV_64F, 1,0, ksize = 5) cv2.imshow ('originálny', obrázok) cv2.waitKey (0) cv2.imshow ('sobelx', sobel_x) cv2.waitKey (0)
#Sobely
cv2.imshow ('sobely', sobel_y) cv2.waitKey (0)
sobel_OR = cv2.bitwise_or (sobel_x, sobel_y) cv2.imshow ('sobelOR', sobel_OR) cv2.waitKey (0)
#laplaian
laplacian = cv2.Laplacian (obrázok, cv2.CV_64F) cv2.imshow ('Laplacian', laplacian) cv2.waitKey (0)
Algoritmus # detekcie okrajov hrán používa ako prahové hodnoty hodnoty gradientu
# v ťažkostiach musíme uviesť dve hodnoty: prahové hodnoty1 a prahové hodnoty2.
# akýkoľvek sklon väčší ako prahová hodnota 2 sa považuje za hranu.
# akýkoľvek sklon väčší ako prahová hodnota 1 sa nepovažuje za okraj.
#values v medzi prahom 1 a prahu 2 sú buď ako okraj alebo non-hrana
#on, ako sú spojené ich intenzity, v tomto prípade všetky hodnoty pod 60 sú považované za
#non okrajoch wheareas ľubovoľnú hodnotu vyššiu ako 120 ° C sú považované za hrany.
canny = cv2.Canny (obrázok, 60 120) cv2.imshow ('canny', canny ) cv2.waitKey (0) cv2.destroyAllWindows ()
14. Perspektívna a afinná transformácia
Vráťme sa o krok späť a pozrime sa na afinné a ne-afinné transformácie, pôvodný obrázok zobrazený nižšie je zjavne neafinický, pretože okraje sa v určitom okamihu stretnú, môžeme ho však vyrovnať skrútením a pohľadom transformovať.
Pre túto perspektívnu transformáciu potrebujeme štyri súradnice pôvodného obrázka a potom štyri body výstupného obrázka, ktoré sú označené bodmi_A a bodmi_B. Najskôr pomocou týchto bodov vypočítame transformačnú maticu M pomocou funkcie getPerspectiveTransform.
A potom sa táto matica dostane do funkcie warpPerspective na vygenerovanie konečného výstupu.
Teraz skúsme najskôr transformáciu perspektívy.
import cv2 import numpy ako np import matplotlib.pyplot ako plt image = cv2.imread ('paper.jpg') cv2.imshow ('original', image) cv2.waitKey (0)
# koordinátor 4 rohov pôvodného obrázka
points_A = np.float32 (,,,])
# súradnice 4 rohov požadovaného výstupu
# používame pomer papiera A4 1: 1,41
points_B = np.float32 (,,,])
#použite dve množiny dvoch bodov na výpočet predpokladanej transformačnej matice, M
M = cv2.getPerspectiveTransform (points_A, points_B) warped = cv2.warpPerspective (image, M, (420 594)) cv2.imshow ('warpprespective', warped ) cv2.waitKey (0) cv2.destroyAllWindows ()
Afinná transformácia je jednoduchšia ako afinná transformácia, pretože na jej transformáciu potrebujeme iba tri body. Celý proces prebieha rovnako, ale namiesto perspektívnej transformácie máme teraz afinnú transformáciu a tiež definujeme stĺpce a riadky v warpAffine z tvarovej funkcie namiesto manuálneho zadania.
import cv2 import numpy ako np import matplotlib.pyplot ako plt image = cv2.imread ('box.jpg') riadky, cols = image.shape cv2.imshow ('original', image) cv2.waitKey (0)
# koordinátor 3 rohov pôvodného obrázka
points_A = np.float32 (,,])
# súradnice 3 rohov požadovaného výstupu
# používame pomer papiera A4 1: 1,41
points_B = np.float32 (,,])
#použite dve množiny dvoch bodov na výpočet afinnej
# transformačnej matice, M.
M = cv2.getAffineTransform (points_A, points_B) warped = cv2.warpAffine (image, M, (cols, lines )) cv2.imshow ('warpaffine', warped ) cv2.waitKey (0) cv2.destroyAllWindows ()
8. Aplikácia Live Sketch
Najskôr si po prečítaní všetkých vyššie uvedených funkcií na manipuláciu s obrázkami pogratuľujte, že ste sa k tomuto mini projektu dostali. Takže v tomto mini projekte Pythonu OpenCV sa naučíme niekoľko nových konceptov slučiek a funkcií. Ak ovládate programovanie, musíte mať širšiu predstavu o tom, čo je funkcia a slučky. Avšak v pythone zostáva základný koncept slučiek a funkcií rovnaký, ale spôsob ich definovania sa trochu mení.
Na začiatku tohto programu teda môžeme vidieť určitú skupinu príkazov smerujúcich pod „ defetch (obrázok): “ toto je formálna definícia funkcie, ktorá je skupinou príkazov pracujúcich spoločne pre určitý výstup.
Takže tento náčrt je funkciou, v jazyku python je funkcia definovaná ako „def“ a končí znakom „:“. Aj príkazy, ktoré musia byť vo vnútri funkcie alebo môžete povedať, ktoré sú potrebné na správne fungovanie funkcie, sú funkciou automaticky zarovnané na stranu. Takže aby vyšli z funkcií, museli byť príkazy úplne zarovnané doľava. Ďalšie odkazy nájdete na google, kde sú definované funkcie v pythone.
Takže v tejto funkcii náčrtu sme predstavili niekoľko vrstiev spracovania obrazu, ktoré sa kombinujú a poskytujú výstup. Najskôr sa obrázok prevedie do odtieňov sivej, aby ho OpenCV mohol ľahko spracovať, a potom sa na obrázok v šedej škále použije Gaussovo rozostrenie, aby sa znížil šum. Potom sa okraje extrahujú pomocou algoritmu detekcie hrán cannyho, potom sa na obrázok definovaný okrajom použije binárna inverzia, tu by binárnu inverziu mohol urobiť aj bitwise_NOT, ale my sme zámerne vybrali túto prahovú binárnu inverziu, pretože dáva slobodu nastavovať jeho parametre, až kým nezískame jasný obraz.
Upozorňujeme tiež, že funkcia vezme obraz argumentov a vráti dva argumenty ret a mask. Zatiaľ čo ret je Boolean, ktorý hovorí, že funkcia je úspešne spustená alebo nie, a maska je konečným výstupom funkcie, tj. Spracovaný obrázok.
Potom druhý koncept operačného webovej kamery v OpenCV, ktorá sa vykonáva pomocou cv2.VideoCapture (0) funkcia, ktorá ukladá obrázok do objektu viečkom , ktoré cap možno čítať s cap.read () funkcie, aj tu si uvedomiť, že viečko. read () je vo vnútri slučky nekonečna while, pretože neustále musela snímať obrázky, aby poskytla dojem živého videa, pričom snímková frekvencia videa by bola snímková frekvencia vašej webovej kamery, ktorá je väčšinou medzi 24 až 60 fps.
cap.read () vracia ret a frame, kde ret je Boolean, čo naznačuje, že funkcia bola úspešne spustená alebo nie, a frame obsahuje obrázok nasnímaný webovou kamerou.
Ďalej uvádzame kompletný kód Python OpenCV na spustenie živého náčrtu
import cv2 import numpy ako np #sketch generujúca funkciu def sketch (obrázok): #convert image to grayscale img_gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) # čistenie obrázka pomocou Gaussian blur img_gray_blur = cv2.GaussianBlur (img_gray = cv2.COLOR_BGR2GRAY) 5,5), 0) #extract edge canny_edges = cv2.Canny (img_gray_blur, 10,70) #doinvertovať binarizáciu obrázku ret, mask = cv2.threshold (canny_edges, 70,255, cv2.THRESH_BINARY_INV) vrátiť masku # inicializovať webkameru, čiapka je objekt poskytovaný zachytávaním videa # obsahuje boolovský údaj označujúci, či bol úspešný (ret) # obsahuje aj obrázky zhromaždené z webovej kamery (rám) cap = cv2.VideoCapture (0), zatiaľ čo True: ret, frame = cap.read () cv2.imshow ('livesketcher', skica (rám)), ak cv2.waitKey (1) == 13: # 13 je enterkey break #release kamera a zatvorte okno, nezabudnite webovú kameru uvoľniť pomocou cap.release () cap.release () cv2.destroyAllWindows ()
Takže toto je koniec časti 2 manipulácií s obrázkami v Python-OpenCV. Ak chcete dobre porozumieť počítačovému videniu a OpenCV, prečítajte si predchádzajúce články (Začíname s Python OpenCV a manipuláciou s obrázkami v Pythone OpenCV (1. časť)) a pomocou počítačového videnia budete môcť vytvoriť niečo zaujímavé.