Sadržaj:

Jednostavno otkrivanje boje pomoću OpenCV-a: 6 koraka
Jednostavno otkrivanje boje pomoću OpenCV-a: 6 koraka

Video: Jednostavno otkrivanje boje pomoću OpenCV-a: 6 koraka

Video: Jednostavno otkrivanje boje pomoću OpenCV-a: 6 koraka
Video: MJC Stream: Видишь енота? А он есть! Главное об ML и компьютерном зрении 2024, Studeni
Anonim
Jednostavno otkrivanje boja pomoću OpenCV-a
Jednostavno otkrivanje boja pomoću OpenCV-a

Bok! Danas ću pokazati jednostavnu metodu otkrivanja boje iz videa uživo pomoću OpenCV -a i pythona.

U osnovi ću samo testirati da li je potrebna boja prisutna u pozadinskom okviru ili ne, a koristeći OpenCV module maskirat ću to područje i istovremeno prikazati okvir.

Korak 1: Datoteke zaglavlja

Datoteke zaglavlja
Datoteke zaglavlja

Ovdje sam upotrijebio dvije datoteke zaglavlja, naime cv2 i NumPy. U osnovi cv2 je OpenCV knjižnica koja učitava sve c ++ datoteke koje su važne dok se koriste naredbe u kodovima (sadrži sve definicije).

Numpy je python knjižnica neophodna za spremanje višedimenzionalnog niza. Koristit ćemo za spremanje koordinata raspona boja.

I numpy kao np u osnovi pomaže našem kodu da se malo skrati korištenjem np svaki put umjesto numpy.

Korak 2: Snimanje videozapisa

Snimanje videa
Snimanje videa

Ovo je prilično jednostavno dok koristite python. Ovdje samo moramo uključiti video rekorder kako bi mogao početi snimati kadrove.

Sada vrijednost unutar VideoCapturea označava kameru, u mom slučaju kamera je spojena na moje prijenosno računalo, dakle 0.

Možete ići slično 1 za sekundarnu kameru i tako dalje. VideoCapture za njega stvara objekt.

Korak 3: Snimanje okvira i definiranje boje

Snimanje okvira i definiranje boje
Snimanje okvira i definiranje boje

Sada ovdje moramo učiniti nešto kako bismo mogli snimiti trenutni kadar videozapisa koji će nam pomoći da izdvojimo sliku, a na tome možemo raditi prema zahtjevu.

"while" petlja će nam pomoći da pokrenemo petlju do potrebnog vremena. Sada se "_, frame = cap.read ()" koristi za provjeru valjanosti snimljenog okvira i sprema ga. "cap.read () je logička varijabla i vraća true ako je okvir ispravno pročitan i ako ne dobijete okvire neće pokazati nikakvu pogrešku, jednostavno ćete dobiti None.

Sada linija 11 i linija 12 u osnovi definiraju raspon boja koje moramo otkriti. Za to sam koristio plavu boju.

Možete nastaviti s bilo kojom bojom za koju trebate samo unijeti BGR vrijednosti za tu određenu boju. Bolje je definirati dva niza pomoću polja numpy jer otkrivanje određene boje u stvarnom svijetu neće nam poslužiti, već ćemo definirati raspon plave boje tako da se detektira unutar raspona.

Za to sam definirao dvije varijable koje spremaju donje BGR vrijednosti i gornje BGR vrijednosti.

Korak 4: Maskiranje i vađenje

Maskiranje i vađenje
Maskiranje i vađenje

Ovdje dolazi glavni zadatak maskiranja okvira i izdvajanja boje okvira. Za maskiranje sam koristio unaprijed definirane naredbe prisutne u knjižnici u OpenCV -u. U osnovi maskiranje je proces uklanjanja dijela okvira, tj. Uklonit ćemo piksele čije BGR vrijednosti u boji ne leže u definiranom rasponu boja, a to radi cv2.inRange. Nakon toga primjenjujemo raspon boja na maskiranu sliku, ovisno o vrijednostima piksela, a za to ćemo koristiti cv2.bitwise_and, Jednostavno će dodijeliti boje maskiranom području ovisno o maski i vrijednostima raspona boja.

Link za cv2. bitwise_and:

Korak 5: Konačno se prikazuje

Konačno se prikazuje!
Konačno se prikazuje!

Ovdje sam koristio osnovni cv2.imshow () za prikaz za svaki okvir kao sliku. Budući da imam okvirne podatke pohranjene u varijablama, mogu ih dohvatiti u imshow (). Ovdje sam prikazao sva tri okvira, izvorni, maskirani i obojeni.

Sada moramo izaći iz while petlje. U tu svrhu jednostavno možemo implementirati cv2.wait. Key (). U osnovi pokazuje vrijeme čekanja prije nego što odgovori. Dakle, ako prođete 0, čekat će beskonačno, a 0xFF govori da je arhitektura 64 -bitna. "ord ()" određuje znak koji će, kada se pritisne, izvršiti naredbu break u bloku if i ona će izaći iz petlje.

Tada cap.release () zatvara video rekorder, a cv2.destroyAllWindows () zatvara sve otvorene prozore.

Ako imate bilo kakvih problema, javite mi.

Veza na izvorni kod:

Preporučeni: