- 1. Bittikohtaiset toiminnot ja peittäminen
- 2. Konvoluutio ja hämärtyminen
- 3. Terävöittäminen - kuvan kääntäminen epäteräväksi
- 4. Threshoding (binarisaatio)
- 5. Laajentuminen, eroosio, avaaminen / sulkeminen
- 6. Reunojen tunnistus ja kuvan kaltevuudet
- 14. Perspektiivi ja affiinimuunnos
- 8. Live Sketch -sovellus
Aikaisemmissa opetusohjelmissa olemme oppineet OpenCV: stä ja tehneet joitain kuvankäsittelyjä ja sitten seuraavassa opetusohjelmassa olemme tehneet joitain kuvankäsittelyjä OpenCV: ssä, kuten rajaus, kierto, kuvanmuunnos jne. Joten jatkaaksemme edellistä Kuvankäsittely-opetusohjelmaa, tässä opimme joitain muita kuvankäsittelytekniikoita, kuten ja opetusohjelman lopussa rakennamme python-opencv-ohjelman, jotta voimme tehdä live-luonnoksen verkkokameran live-syötteestä. Tämä sovellus käyttää monia kuvankäsittelytoimintoja, jotka olemme oppineet tähän mennessä tai opimme tässä opetusohjelmassa, joten tämä on hyvä käytännön esimerkki kaikkien toimintojen kattamiseksi.
Kuten edellisessä opetusohjelmassa kerrottiin, OpenCV on avoimen lähdekoodin Commuter Vision -kirjasto, jolla on C ++, Python ja Java -rajapinnat ja tukee Windowsia, Linuxia, Mac OS: ää, iOS: ää ja Androidia. Joten se voidaan helposti asentaa Raspberry Pi -ohjelmaan Python- ja Linux-ympäristössä. Ja Vadelma Pi: tä, jossa on OpenCV ja liitetty kamera, voidaan käyttää luomaan monia reaaliaikaisia kuvankäsittelysovelluksia, kuten kasvojentunnistus, kasvojen lukitus, esineiden seuranta, auton rekisterikilven tunnistus, kodin turvajärjestelmä jne.
Tässä opetusohjelmassa näemme lisää kuvankäsittelyjä käyttämällä Python OpenCV: tä. Tässä opitaan soveltamaan seuraavaa toimintoa kuvaan Python OpenCV: n avulla:
- Bittikohtaiset toiminnot ja peittäminen
- Konvoluutio ja hämärtyminen
- Terävöittäminen - kuvan kääntäminen epäteräväksi
- Kynnysarvo (binarisaatio)
- Laajentuminen, eroosio, avaaminen / sulkeminen
- Reunojen tunnistus ja kuvan kaltevuudet
- Perspektiivi & Affine Transform
- Live Sketch -sovellus
1. Bittikohtaiset toiminnot ja peittäminen
Bittikohtaiset toiminnot auttavat sinua kuvan peittämisessä ja auttavat luomaan yksinkertaisia kuvia.
Neliön tekeminen
import cv2 import numpy as np #käytämme vain kahta ulottuvuutta, koska tämä on harmaasävykuva, jos käytimme # värikuvaa, olisimme sitten käyttäneet suorakulmion = np.zeros ((300,300,3), np.uint8) # Neliön muotoisen neliön tekeminen = np.zeros ((300,300), np.uint8) cv2. suorakulmio (neliö, (50,50), (250,250), 255, -1) cv2.imshow ("neliö", neliö) cv2. waitKey (0)
Ellipsin tekeminen
ellipsi = np.zeros ((300,300), np.uint8) cv2.ellipsi (ellipsi, (150,150), (150,150), 30,0,180,255, -1) cv2.imshow ("ellipsi", ellipsi) cv2.waitKey (0)
Kokeile bittitason operaatioita
#AND_näyttää vain siellä, missä nämä kaksi leikkaavat
BitwiseAND = cv2.bitwise_and (neliö, ellipsi) cv2.imshow ("AND", BitwiseAND) cv2.waitKey (0)
#OR_näyttää vain neliön tai ellipsin
BitwiseOR = cv2.bitwise_or (neliö, ellipsi) cv2.imshow ("OR", BitwiseOR) cv2.waitKey (0)
#XOR_shows vain, jos kumpikin on olemassa itsessään
BitwiseXOR = cv2.bitwise_xor (neliö, ellipsi) cv2.imshow ("XOR", BitwiseXOR) cv2.waitKey (0)
#NOT_näyttää kaiken, joka ei ole osa ellipsia, ja EI-operaatiota voidaan soveltaa vain yhteen kuvaan
BitwiseNOT_elp = cv2.bitwise_not (ellipsi) cv2.imshow ("NOT_ellipse", BitwiseNOT_elp) cv2.waitKey (0) cv2.destroyAllWindows ()
2. Konvoluutio ja hämärtyminen
Konvoluutio on matemaattinen operaatio suoritetaan kaksi toimintoa tuottamaan kolmasosaa funktio, joka on tyypillisesti muokattu versio alkuperäisestä toiminto.
Lähtökuva = kuva Toiminto Ytimen koko
Vuonna konenäkö käytämme ytimen määrittää koon, joihin hoidamme manipulointiväline funktion meidän kuvan.
Sumennus on toiminto, jossa keskiarvoistamme alueen pikselit (ydin)
OpenCV hämärtää kuvan soveltamalla ytimiä, ydin kertoo kuinka muuttaa minkä tahansa annetun pikselin arvoa yhdistämällä se eri määrään vierekkäisiä pikseleitä, joita ydin käytetään kuvan jokaiseen pikseliin yksitellen lopullisen kuvan tuottamiseksi.
Yksinkertaisesti sanomalla, kuvan konvoluutio on yksinkertaisesti elementtiviiva kahden matriisin kertolasku, jota seuraa summa.
Voimme yksinkertaisesti ymmärtää sen seuraavalla esimerkillä.
Yllä oleva on 3X3-ydin.
Kerroin 1/25: lla normalisoitumiseen eli summa yhteen, johon olimme lisänneet intensiteettiä tai vähentäneet intensiteettiä, kuten kuvien kirkastumisen tai tummentamisen tapauksessa.
Testataan funktion cv2.filter2D (kuva, -1, ydin) antama avautumisen hämärtymismenetelmän suodatin2D
tuo cv2 tuo numerotiedosto muodossa np image = cv2.imread ('elephant.jpg') cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
# 3x3-ytimen matriisin luominen
ydin_3x3 = np.ones ((3,3), np. float32) / 9
# käytämme cv2.filter2D: tä muuntamaan ydin kuvaan
näön = cv2.filter2D (kuva, -1, ydin_3x3) cv2.imshow ('3x3_blurring', näön) cv2.waitKey (0)
# 7x7-ytimen matriisin luominen
kernel_7x7 = np.ones ((7,7), np. float32) / 49
# käytämme cv2.filter2D: tä muuntamaan ydin kuvaan
näön = cv2.filter2D (kuva, -1, ytimen_7x7) cv2.imshow ('7x7_sumennus', näön) cv2.waitKey (0) cv2.destroyAllWindows ()
On myös muita epätarkkoja menetelmiä:
cv2.blur - Keskiarvo määritetyn ikkunan yli.
cv2.GaussianBlur - Samankaltainen, mutta käyttää Gaussin ikkunaa (korostetaan enemmän keskipisteitä).
cv2.medianBlur– Käyttää kaikkien ikkunan elementtien mediaania.
cv2.bilateralFilter - Hämärtää pitäen reunat terävinä, mutta säilyttää reunat ja viivan yksityiskohdat.
Näemme yksi kerrallaan alla, näytä ensin alkuperäinen kuva käyttämällä alla olevaa koodia:
tuo cv2 tuo numerotiedosto muodossa np image = cv2.imread ('elephant.jpg') cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
cv2.blur:
Tässä menetelmässä keskiarvoistaminen suoritetaan kääntämällä kuva normalisoidulla laatikkosuodattimella, tämä ottaa paikan laatikon alle ja korvaa keskuselementin. Täällä laatikon koon on oltava pariton ja positiivinen .
# cv2.blur blur = cv2.blur (kuva, (3,3)) cv2.imshow ('Keskiarvo', hämärtää) cv2.waitKey (0)
cv2.Gaussian Blur:
# cv2.GaussianBlur # yritetään laatikkosuodattimen sijaan kokeilemaan Gaussin ydintä Gaussian = cv2.GaussianBlur (kuva, (7,7), 0) cv2.imshow ('Gaussin hämärtyminen', Gaussian) cv2.waitKey (0)
cv2.medianBlur:
Se vie kaikkien ytimen alueen pikselien mediaanin ja keskeinen elementti korvataan tällä mediaaniarvolla.
# cv2.medianBlur # ottaa kaikkien ytimen alueen pikselien mediaanin ja keskeisen elementin # korvataan tällä mediaaniarvolla. mediaani = cv2.medianBlur (kuva 5) cv2.imshow (mediaani hämärtymistä ', mediaani) cv2.waitKey (0)
cv2.bilateralFilter:
Kahdenvälinen on erittäin tehokas melunpoistossa pitäen reunat terävinä
# cv2.bilateralFilter #Bilateral on erittäin tehokas melunpoistossa pitäen reunat terävinä kahdenvälisinä = cv2.bilateralFilter (kuva, 9,75,75) cv2.imshow ('kahdenvälinen hämärtyminen', kahdenvälinen) cv2.waitKey (0) cv2. destrAllWindows ()
Image de-noising-non Local tarkoittaa irrotusta
tuo cv2 tuo numerotiedosto muodossa np image = cv2.imread ('elephant.jpg') cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
#parameter jälkeen Ei mitään on suodattimen vahvuus 'h' (5-10 on hyvä alue) #seuraava on h värikomponenteille, aseta sama arvo kuin h uudelleen
dst = cv2.fastNlMeansDenoisingColored (kuva, Ei mitään, 6,6,7,21) cv2.imshow ('Nopea tarkoittaa denois', dst) cv2.waitKey (0) cv2.destroyAllWindows ()
Ei-paikallisia keinoja on 4 muunnosta
cv2.fastNlMeansDenoising () - yhdelle harmaasävykuvalle
cv2.fastNlMeansDenoisingColored () - Yksivärinen kuva
cv2.fastNlmeansDenoisingMulti () - kuvasekvenssin harmaasävyille
cv2.fastNlmeansDenoisingcoloredMulti () - kuvasekvenssille värillinen
3. Terävöittäminen - kuvan kääntäminen epäteräväksi
Teroitus on epäselvyyden vastakohta, se vahvistaa tai korostaa kuvan reunoja.
Ydin =,,
Ytimen matriisimme on yhteenveto, joten ei tarvitse normalisoida (eli kerrotaan kertoimella samaan kirkkauteen kuin alkuperäinen), ellei ydintä ole normalisoitu yhdeksi, kuva olisi kirkkaampi tai tummempi.
tuo cv2 tuo numerotiedosto muodossa np image = cv2.imread ('elephant.jpg') cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
kernel_sharpening = np.array (,
])
# sovellettava teroitusydin syötekuvaan
teroitettu = cv2.filter2D (kuva, -1, kernel_sharpening) cv2.imshow ('teroitettu kuva', teroitettu) cv2.waitKey (0) cv2.destroyAllWindows ()
4. Threshoding (binarisaatio)
Kynnysarvo on kuvan muuntaminen binaarimuodoksi. Opencv: ssä on erillinen funktio kynnykselle määritelty seuraavasti
CV2-kynnys (kuva, kynnysarvo, suurin arvo, kynnystyyppi)
Kynnystyyppejä on seuraavat:
- cv2.THRESH_BINARY - yleisin
- cv2. THRESH_BINARY_INV - yleisin
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2. THRESH_TOZERO_INV
HUOMAUTUS: kuva on muunnettava harmaasävyksi ennen kynnystä
tuo cv2 tuoda numpy nimellä np # lataa kuva harmaasävykuvana = cv2.imread ('gradient.jpg', 0) cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
#arvo alle 127 siirtyy 0: een (musta) ja yli 127: n arvoon 255 (valkoinen)
_, thresh1 = cv2.threshold (kuva, 127,255, cv2.THRESH_BINARY) cv2.imshow ('1 kynnys', thresh1) cv2.waitKey (0)
# arvo alle 127 menee arvoon 255 ja arvot yli 127 menee arvoon 0 (käänteinen yllä olevasta)
_, thresh2 = cv2.threshold (kuva, 127,255, cv2.THRESH_BINARY_INV) cv2.imshow ('2 kynnys', thresh2) cv2.waitKey (0)
# arvoa yli 127 katkaistaan (pidetään) 127: ssä, argumenttia 255 ei käytetä.
_, thresh3 = cv2.threshold (kuva, 127,255, cv2.THRESH_TRUNC) cv2.imshow ('3 thresh trunc', thresh3) cv2.waitKey (0)
#arvot alle 127 siirtyvät arvoon 0, yli 127 eivät muutu
_, thresh4 = cv2.threshold (kuva, 127,255, cv2.THRESH_TOZERO) cv2.imshow ('4 kynnys', thresh4) cv2.waitKey (0)
#Revesrse yllä, alle 127 on muuttumaton, yli 127 menee nollaan
_, thresh5 = cv2.threshold (kuva, 127,255, cv2.THRESH_TOZERO_INV) cv2.imshow ('5 kynnys', thresh5) cv2.waitKey (0) cv2.destroyAllWindows ()
5. Laajentuminen, eroosio, avaaminen / sulkeminen
Nämä ovat operaatioita matemaattisen morfologian alalla
Laajennus - se lisää pikseleitä kuvan objektirajoihin.
Eroosio - Poistaa pikselit kuvan objektirajoista.
Avaaminen - Eroosio, jota seuraa laajeneminen.
Sulkeminen - laajeneminen ja eroosio.
Avaamisesta on paljon hyötyä kuvien irrottamisessa, koska se ensin ohenee kuvaa eroosion avulla (poistaa kohinan) ja laajentaa sitä sitten.
Sekoitus laajentumisen ja eroosion kanssa
Laajentumisen ja eroosion välillä on joskus sekaannusta yleensä valkoisella taustalla olevissa kuvissa, koska opencv pitää valkoista taustaa laajentuvana tai heikentävänä kuvana alkuperäisen kuvan sijasta, joten tässä tapauksessa eroosiota käytetään laajentumisena ja päinvastoin, kuten kuvassa nähtävissä alapuolella.
Muista, Dilation lisää pikseleitä rajoille kohteiden kuvalle Eroosio poistaa pikseliä rajoille objektien kuvan
Tuo cv2 Tuo numerotiedosto muodossa np image = cv2.imread ('imagecv.png', 0) cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
#Erosion
# määritetään ytimen koko
ydin = np.ones ((5,5), np.uint8)
# nyt heikennämme kuvaa, tässä iterointi ei ole niin monta kertaa, että haluat poistaa kuvan
eroosio = cv2.erode (kuva, ydin, iteraatiot = 1) cv2.imshow ('Eroosio', eroosio) cv2.waitKey (0)
#laajennus
dilation = cv2.dilate (kuva, ydin, iteraatiot = 1) cv2.imshow ('dilation', dilation) cv2.waitKey (0)
#avaus, Hyvä melun poistamiseen
avaaminen = cv2.morphologyEx (kuva, cv2.MORPH_OPEN, ydin) cv2.imshow ('avaus', avautuminen) cv2.waitKey (0)
# sulkeminen, Hyvä melun poistamiseen
sulkeminen = cv2.morphologyEx (kuva, cv2.MORPH_CLOSE, kernel) cv2.imshow ('sulkeminen', sulkeminen) cv2.waitKey (0) cv2.destroyAllWindows ()
6. Reunojen tunnistus ja kuvan kaltevuudet
Reunojen tunnistus on erittäin tärkeä alue tietokoneen näkössä, etenkin kun käsitellään ääriviivoja.
Reunat voidaan määritellä kuvan rajoiksi, itse asiassa ne ovat reunoja, jotka määrittelevät objektin kuvissa ja säilyttävät paljon tietoa kuvasta.
Reunat voidaan muodollisesti määritellä kuvan äkillisiksi muutoksiksi (epäjatkuvuuksiksi) ja ne voivat koodata yhtä paljon tietoa kuin pikselit.
Yllä oleva kuva osoittaa, kuinka tietokoneen visio tunnistaa ja tunnistaa kuvan.
Reunatunnistusalgoritmit: - Reunatunnistusalgoritmeja on kolme päätyyppiä
- Sobel - pysty- tai vaakakuvien korostamiseen.
- Laplacian - optimaalinen alhaisen virhesuhteen, tarkasti määriteltyjen reunojen ja tarkan tunnistuksen ansiosta.
- Canny Edge -tunnistusalgoritmi (John F.F.Canny siirtyi vuonna 1986)
1. soveltaa Gaussin epätarkkuutta
2. Hakee kuvan intensiteettigradientin
3. käyttää ei-maksimaalista estoa (eli poistaa pikselit, jotka eivät ole reunoja).
4. Hystereesi soveltaa kynnystä (ts. Jos pikseli on ylemmän ja alemman kynnyksen sisällä, sitä pidetään reunana)
tuo cv2 tuo numerotiedosto muodossa np image = cv2.imread ('input.jpg', 0) korkeus, leveys = kuva.muoto
#sobel
#puristamalla sobel-reunat
sobel_x = cv2.Sobel (kuva, cv2.CV_64F, 0,1, ksize = 5) sobel_y = cv2.Sobel (kuva, cv2.CV_64F, 1,0, ksize = 5) cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0) cv2.imshow ('sobelx', sobel_x) cv2.waitKey (0)
#Totisesti
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 (kuva, cv2.CV_64F) cv2.imshow ('Laplacian', laplacian) cv2.waitKey (0)
# canny edge Detection -algoritmi käyttää gradienttiarvoja kynnyksinä #
canny: ssa on annettava kaksi arvoa: kynnys1 ja kynnys2.
#kaikaa kynnystä 2 suurempaa kaltevuutta pidetään reunana.
# minkä tahansa kynnyksen 1 suurempaa kaltevuutta ei pidetä reunana.
#values välillä kynnyksen 1 ja kynnys 2 ovat joko reuna tai ei-reuna
#ON miten niiden intensiteetit on kytketty, tässä tapauksessa mikä tahansa arvo alle 60 ovat katsotaan
#non reunat wheareas mikä tahansa arvo yli 120 pidetään reunat.
canny = cv2.Canny (kuva, 60,120) cv2.imshow ('canny', canny ) cv2.waitKey (0) cv2.destroyAllWindows ()
14. Perspektiivi ja affiinimuunnos
Otetaan askel taaksepäin ja katsotaan affiinisia ja ei-affiinisia muunnoksia, alla oleva alkuperäinen kuva on selvästi epä affiininen kuva, koska reunat kohtaavat jossain vaiheessa, mutta voimme suoristaa sen vääntämällä ja ottamalla perspektiivin muuttaa.
Tätä perspektiivimuunnosta varten tarvitaan alkuperäisen kuvan neljä koordinaattia ja sitten lähtökuvan neljä pistettä, ne on merkitty pisteillä A ja pisteillä B. Ensinnäkin näiden pisteiden avulla lasketaan muunnosmatriisi, M funktion getPerspectiveTransform avulla.
Ja sitten tämä matriisi annetaan warpPerspective- funktiolle lopullisen tuotoksen luomiseksi .
Kokeillaan nyt ensin Perspektiivimuunnosta.
tuo cv2 tuoda numerotiedostoina np tuoda matplotlib.pyplot muodossa plt image = cv2.imread (' paper.jpg ') cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
#koordinaatti alkuperäisen kuvan 4 kulmasta
pisteet_A = np. kelluva32 (,,,])
# halutun tulosteen 4 kulman
koordinaatit # käytämme A4-paperin suhdetta 1: 1.41
pisteet_B = np. kelluva32 (,,,])
# käytä kahden pisteen kahta sarjaa laskeaksesi ennakoivan muunnosmatriisin, M
M = cv2.getPerspectiveTransform (pisteet_A, pisteet_B) vääntynyt = cv2.warpPerspective (kuva, M, (420594)) cv2.imshow ('loimiperspektiivi', vääntynyt) cv2.waitKey (0) cv2.destroyAllWindows ()
Affiinimuunnos on helpompaa kuin ei-affiininen muunnos, koska tarvitsemme vain kolme pistettä muunnoksen saamiseksi. Koko prosessi sujuu samalla tavalla, mutta perspektiivimuunnoksen sijaan meillä on nyt affiinimuunnos, ja myös määritämme sarakkeet ja rivit warpAffine- muodossa muoto-funktiosta sen sijaan, että kirjoitat siihen manuaalisesti.
tuo cv2 tuoda numerotiedostoksi np tuoda matplotlib.pyplot muodossa plt image = cv2.imread ('box.jpg') rivejä, cols = image.shape cv2.imshow ('alkuperäinen', kuva) cv2.waitKey (0)
#koordinaatti alkuperäisen kuvan kolmesta kulmasta
pisteet_A = np. kelluva32 (,,])
# halutun tulostuksen 3 kulman
koordinaatit # käytämme A4-paperin suhdetta 1: 1.41
pisteet_B = np. kelluva32 (,,])
# Laske Affine # -muunnosmatriisi M käyttämällä kahta kahden pisteen sarjaa
M = cv2.getAffineTransform (pisteet_A, pisteet_B) vääntynyt = cv2.warpAffine (kuva, M, (sarakkeet, rivit)) cv2.imshow ('warpaffine', vääntynyt) cv2.waitKey (0) cv2.destroyAllWindows ()
8. Live Sketch -sovellus
Ensinnäkin, onnittele itseäsi siitä, että olet koonnut tämän miniprojektin luettuasi kaikki yllä olevat kuvankäsittelytoiminnot. Joten tässä Python OpenCV: n miniprojektissa aiomme oppia uusia käsitteitä silmukoista ja toiminnoista. Jos olet perehtynyt ohjelmointiin, sinulla on oltava laajempi käsitys toiminnasta ja silmukoista. Pythonissa silmukoiden ja toimintojen peruskäsite pysyy kuitenkin samana, mutta menetelmä niiden määrittelemiseksi muuttuu hieman.
Joten tämän ohjelman alussa voimme nähdä tietyn joukon lauseita otsikossa " def-luonnos (kuva) ": tämä on muodollinen määritelmä toiminnolle, jonka lausejoukko työskentelee yhdessä tietyn tuotoksen kanssa.
Joten tämä luonnos on funktio, pythonissa funktio määritellään "def": llä ja päättyy ":" - merkillä. Myös lauseet, joiden on oltava toiminnon sisällä, tai voit sanoa, joita vaaditaan toiminnon moitteettomaan toimintaan, ovat toiminnon mukaan sivutasoitetut automaattisesti. Joten funktioista poistumiseksi lausekkeiden oli oltava täysin vasemmalla. Lisäohjeita saat Googlesta siitä, miten toiminnot määritellään pythonissa.
Joten tässä luonnostoiminnossa olemme esittäneet useita kuvankäsittelykerroksia, jotka yhdessä muodostavat tuotoksen. Ensinnäkin kuva muunnetaan harmaasävyiksi, jotta opencv pystyy käsittelemään sen helposti, ja sitten harmaasävykuvaan kohdistetaan Gaussin epätarkkuus kohinan vähentämiseksi. Sitten reunat puretaan cannyn reunan havaitsemisalgoritmin avulla, binäärinen käänteinen asetetaan reunamääritettyyn kuvaan, tässä myös binäärinen käänteinen voisi tehdä bitwise_NOT, mutta olimme tietoisesti valinneet tämän kynnysarvon binäärisen käänteisen, koska se antaa vapauden asettaa sen parametrit, kunnes saamme selkeän kuvan.
Huomaa myös, että funktio ottaa argumenttikuvan ja palauttaa kaksi argumenttia uudelleen ja peittää. Vaikka ret on looginen, kertoo, että toiminto suoritetaan onnistuneesti tai ei, ja peite on funktion eli käsitellyn kuvan viimeinen tulos.
Sitten toinen konsepti on toimia webbikamera OpenCV joka tapahtuu cv2.VideoCapture (0) -toiminto, joka tallentaa kuvan esine korkki että korkki voidaan lukea cap.read () funktio, myös tässä todeta, että korkki. read () on äärettömän silmukan sisällä, koska sen täytyi jatkuvasti kaapata kuvia, jotta se saisi live-videon, jossa videon kehysnopeus olisi verkkokamerasi kehysnopeus, joka on enimmäkseen 24-60 kuvaa sekunnissa.
cap.read () palauttaa ret ja frame, missä ret on looginen merkki, joka osoittaa, että toiminto suoritettiin onnistuneesti tai ei ja kehys sisältää verkkokameralla otetun kuvan.
Alla on täydellinen Python OpenCV -koodi Live-luonnoksen suorittamiseen
tuo cv2 tuoda numerotiedosto np # sketch-generointitoiminto def-luonnos (kuva): #convert kuva harmaasävyksi img_gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) #kuvan puhdistaminen käyttämällä Gaussin hämärtää img_gray_blur = cv2.GaussianBlur (5,5), 0) #extract reunat canny_edges = cv2.Canny (img_gray_blur, 10,70) # tee käänteinen binarisoi kuva ret, mask = cv2.threshold (canny_edges, 70,255, cv2.THRESH_BINARY_INV) palautusmaski #initialize webcam, korkki on esine, jonka video kaapata #it sisältää Boolen osoittaa, jos se on onnistunut (ret) #it sisältää myös verkkokamerasta kerätyt kuvat (kehys) cap = cv2.VideoCapture (0) kun True: ret, kehys = cap.read () cv2.imshow ('livesketcher', luonnos (kehys)) if cv2.waitKey (1) == 13: # 13 on enterkey tauko #release kamera ja sulje ikkuna, muista vapauttaa webcam avulla cap.release () cap.release () cv2.destroyAllWindows ()
Joten tämä on Python-OpenCV: n kuvankäsittelyjen osan 2 loppu. Tietokonenäön ja OpenCV: n aliarvioimiseksi käy läpi edelliset artikkelit (Python OpenCV: n käytön aloittaminen ja Python OpenCV: n kuvankäsittelyt (osa 1), ja voit tehdä jotain hienoa Computer Vision -ohjelmalla.