Sisällysluettelo:

Yksinkertainen värin tunnistus OpenCV: llä: 6 vaihetta
Yksinkertainen värin tunnistus OpenCV: llä: 6 vaihetta

Video: Yksinkertainen värin tunnistus OpenCV: llä: 6 vaihetta

Video: Yksinkertainen värin tunnistus OpenCV: llä: 6 vaihetta
Video: OpenCV - 06 : Head Recognition 2024, Kesäkuu
Anonim
Yksinkertainen värin tunnistus OpenCV: n avulla
Yksinkertainen värin tunnistus OpenCV: n avulla

Hei! Tänään aion näyttää yksinkertaisen menetelmän havaita väri live -videosta OpenCV: n ja pythonin avulla.

Pohjimmiltaan testaan vain, että tarvittava väri on taustakehyksessä vai ei, ja OpenCV -moduulien avulla peitän kyseisen alueen ja näytän samanaikaisesti kehyksen.

Vaihe 1: Otsikkotiedostot

Otsikkotiedostot
Otsikkotiedostot

Nyt tässä olen käyttänyt kahta otsikkotiedostoa, nimittäin cv2 ja NumPy. Periaatteessa cv2 on OpenCV -kirjasto, joka lataa kaikki c ++ -tiedostot, jotka ovat tärkeitä käytettäessä koodien komentoja (se sisältää kaikki määritelmät).

Ja Numpy on python -kirjasto, joka on välttämätön moniulotteisen matriisin tallentamiseen. Käytämme värialueen koordinaattien tallentamiseen.

Ja numpy as np auttaa pohjimmiltaan koodiamme lyhentämään hieman käyttämällä np: tä joka kerta numpy: n sijaan.

Vaihe 2: Videon sieppaus

Videon sieppaus
Videon sieppaus

Tämä on melko yksinkertaista pythonia käytettäessä. Tässä meidän on vain kytkettävä videonauhuri päälle, jotta se voi aloittaa kuvien tallentamisen.

Nyt VideoCapturen sisällä oleva arvo osoittaa kameran, minun tapauksessani kamera on kytketty kannettavaan tietokoneeseen, joten 0.

Voit mennä samalla tavalla kuin 1 toissijaiselle kameralle ja niin edelleen. VideoCapture luo sille objektin.

Vaihe 3: Kehyksen sieppaus ja värin määrittäminen

Kehyksen sieppaus ja värin määrittäminen
Kehyksen sieppaus ja värin määrittäminen

Nyt meidän on tehtävä jotain, jotta voimme kaapata videon välittömän kehyksen, joka auttaa meitä poimimaan kuvan ja voimme työskennellä sen suhteen vaatimusten mukaisesti.

"while" -silmukka auttaa meitä suorittamaan silmukan vaadittuun aikaan. Nyt "_, frame = cap.read ()" käytetään tarkistetun kuvan kelvollisuuden tarkistamiseen ja tallentamiseen. "cap.read () on boolen muuttuja ja palauttaa arvon true, jos kehys luetaan oikein ja jos et saa kehyksiä, se ei näytä virheitä, saat yksinkertaisesti None.

Nyt rivit 11 ja 12 määrittelevät pohjimmiltaan värialueen, joka meidän on tunnistettava. Tätä varten olen tottunut siniseen väriin.

Voit jatkaa mitä tahansa väriä, joka sinun tarvitsee vain kirjoittaa BGR -arvot kyseiselle värille. On parempi määritellä kaksi taulukkoa käyttämällä numpy -matriiseja, koska tietyn värin havaitseminen todellisessa maailmassa ei palvele tarkoitustamme, vaan määritämme sinisen värin alueen siten, että se havaitsee alueen.

Tätä varten olen määritellyt kaksi muuttujaa, jotka tallentavat alemmat BGR -arvot ja ylemmät BGR -arvot.

Vaihe 4: Peittäminen ja poistaminen

Naamiointi ja poisto
Naamiointi ja poisto

Nyt tulee päätehtävä peittää kehys ja poimia kehyksen väri. Käytin peittämiseen OpenCV: n kirjastossa olevia ennalta määritettyjä komentoja. Pohjimmiltaan peittäminen on kehyksen osan poistaminen, eli poistamme pikselit, joiden värin BGR -arvot eivät ole määritetyllä värialueella, ja tämän tekee cv2.inRange. Myöhemmin käytämme värialuetta peitetylle kuvalle pikseliarvojen mukaan ja käytämme tätä varten cv2.bitwise_and, se yksinkertaisesti määrittää värit peitetylle alueelle maskin ja värialueen arvojen mukaan.

Linkki cv2: lle. bitwise_and:

Vaihe 5: Lopuksi näytetään

Lopulta esillä!
Lopulta esillä!

Tässä olen käyttänyt perus cv2.imshow () -näyttöä jokaisen kehyksen näyttämiseen kuvana. Koska kehystiedot on tallennettu muuttujiin, voin hakea ne imshow (): ssa. Tässä olen näyttänyt kaikki kolme kehystä, alkuperäiset, naamioidut ja värilliset.

Nyt meidän on poistuttava while -silmukasta. Tätä varten voimme yksinkertaisesti toteuttaa cv2.wait. Key (). Pohjimmiltaan se kertoo odotusajan ennen vastaamista. Joten jos ohitat 0, se odottaa loputtomasti ja 0xFF kertoo, että arkkitehtuuri on 64 -bittinen. "ord ()" määrittää merkin, jota painettaessa suoritetaan break -komento if -lohkossa ja se tulee ulos silmukasta.

Sitten cap.release () sulkee videonauhurin ja cv2.destroyAllWindows () sulkee kaikki avatut ikkunat.

Jos sinulla on ongelmia, kerro siitä minulle.

Linkki lähdekoodiin:

Suositeltava: