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, Novembar
Anonim
Jednostavno otkrivanje boja pomoću OpenCV-a
Jednostavno otkrivanje boja pomoću OpenCV-a

Zdravo! 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 pozadini ili ne, a koristeći OpenCV module maskirat ću tu regiju i istovremeno prikazati okvir.

Korak 1: Datoteke zaglavlja

Zaglavlje datoteke
Zaglavlje datoteke

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

Numpy je python biblioteka koja je 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 upotrebom np svaki put umjesto numpy.

Korak 2: Snimanje videozapisa

Snimanje video zapisa
Snimanje video zapisa

Ovo je prilično jednostavno dok koristite python. Ovdje samo trebamo 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 moj laptop, pa 0.

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

Korak 3: Snimanje okvira i definiranje boje

Snimanje okvira i definisanje boje
Snimanje okvira i definisanje boje

Sada ovdje moramo učiniti nešto kako bismo mogli uhvatiti trenutni kadar videozapisa koji će nam pomoći da izdvojimo sliku i možemo raditi na tome 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 pohranjuje 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 grešku, jednostavno ćete dobiti None.

Sada linija 11 i linija 12 u osnovi definiraju raspon boja koje moramo otkriti. Za to sam navikao na 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 numpy nizova jer otkrivanje određene boje u stvarnom svijetu neće poslužiti našoj svrsi, već ćemo definirati raspon plave boje tako da detektira unutar raspona.

Za ovo 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

Sada dolazi glavni zadatak maskiranja okvira i izdvajanja boje okvira. Za maskiranje sam koristio unaprijed definirane naredbe prisutne u biblioteci u OpenCV -u. U osnovi maskiranje je proces uklanjanja nekog dijela kadra, 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 vrijednosti maske i 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 svakog okvira kao slike. Budući da imam okvirne podatke pohranjene u varijablama, mogu ih dohvatiti u imshow (). Ovdje sam prikazao sva tri okvira, originalni, 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 odgovora. Dakle, ako prođete 0, čekat će beskonačno, a 0xFF govori da je arhitektura 64 -bitna. "ord ()" specificira znak koji će pritisnuti izvršiti naredbu break u bloku if i ona će izaći iz petlje.

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

Ako imate bilo kakvih problema, obavijestite me.

Link na izvorni kod:

Preporučuje se: