Obsah:

Jednoduchá detekcia farieb pomocou OpenCV: 6 krokov
Jednoduchá detekcia farieb pomocou OpenCV: 6 krokov

Video: Jednoduchá detekcia farieb pomocou OpenCV: 6 krokov

Video: Jednoduchá detekcia farieb pomocou OpenCV: 6 krokov
Video: Leap Motion SDK 2024, November
Anonim
Jednoduchá detekcia farieb pomocou OpenCV
Jednoduchá detekcia farieb pomocou OpenCV

Ahoj! Dnes ukážem jednoduchú metódu detekcie farby zo živého videa pomocou OpenCV a pythonu.

V zásade len otestujem, či je požadovaná farba v rámčeku pozadia prítomná alebo nie, a pomocou modulov OpenCV túto oblasť zamaskujem a súčasne zobrazím rámec.

Krok 1: Súbory hlavičky

Súbory hlavičky
Súbory hlavičky

Teraz som použil dva hlavičkové súbory, konkrétne cv2 a NumPy. Cv2 je v zásade knižnica OpenCV, ktorá načítava všetky súbory c ++, ktoré sú dôležité pri použití príkazov v kódoch (obsahuje všetky definície).

A Numpy je pythonová knižnica, ktorá je zásadná pre ukladanie viacrozmerného poľa. Budeme používať na uloženie našich súradníc farebného rozsahu.

A numpy ako np v podstate pomáha nášmu kódu trochu sa skrátiť tým, že namiesto numpy použije zakaždým np.

Krok 2: Nasnímanie videa

Zachytávanie videa
Zachytávanie videa

Pri použití pythonu je to veľmi jednoduché. Tu stačí zapnúť videorekordér, aby mohol začať nahrávať snímky.

Teraz hodnota vo vnútri VideoCapture označuje kameru, v mojom prípade je kamera pripojená k môjmu notebooku, takže 0.

Môžete ísť podobne ako 1 pre sekundárny fotoaparát a podobne. Objekt VideoCapture pre to vytvorí objekt.

Krok 3: Zachytenie rámca a definovanie farby

Zachytenie rámca a definovanie farby
Zachytenie rámca a definovanie farby

Teraz tu musíme urobiť niečo, aby sme mohli zachytiť okamžitý rámec videa, ktorý nám pomôže extrahovať obrázok, a môžeme na tom pracovať podľa požiadaviek.

Cyklus „while“nám pomôže spustiť slučku na požadovaný čas. Teraz "_, frame = cap.read ()" slúži na kontrolu platnosti zachyteného rámca a jeho uloženie. „cap.read () je booleovská premenná a vracia hodnotu true, ak je rámec správne prečítaný a ak nedostanete žiadne rámce, nezobrazí žiadnu chybu, jednoducho dostanete None.

Teraz riadky 11 a riadky 12 v zásade definujú rozsah farieb, ktoré musíme zistiť. Na to som použil modrú farbu.

Môžete pokračovať s ľubovoľnou farbou, pre ktorú potrebujete, zadajte hodnoty BGR pre konkrétnu farbu. Je lepšie definovať dve polia pomocou numpy polí, pretože detekcia konkrétnej farby v reálnom svete nebude slúžiť nášmu účelu, skôr definujeme rozsah modrej farby tak, aby detekoval v rámci rozsahu.

Za týmto účelom som definoval dve premenné ukladajúce nižšie hodnoty BGR a horné hodnoty BGR.

Krok 4: Maskovanie a extrahovanie

Maskovanie a extrakcia
Maskovanie a extrakcia

Teraz prichádza hlavná úloha maskovania rámu a extrahovania farby rámu. Na maskovanie som použil preddefinované príkazy prítomné v knižnici v OpenCV. V zásade je maskovanie procesom odstránenia určitej časti rámca, t. J. Odstránime pixely, ktorých hodnoty BGR farby nespadajú do definovaného farebného rozsahu, a to pomocou programu cv2.inRange. Potom použijeme rozsah farieb na maskovaný obrázok v závislosti od hodnôt pixelov a na to použijeme cv2.bitwise_and, Jednoducho priradí farby maskovanej oblasti v závislosti od hodnôt masky a rozsahu farieb.

Odkaz na cv2. bitwise_and:

Krok 5: Konečne zobrazenie

Konečne sa zobrazuje!
Konečne sa zobrazuje!

Tu som použil základnú cv2.imshow () na zobrazenie pre každý rámec ako obrázok. Keďže mám údaje rámcov uložené v premenných, môžem ich načítať v imshow (). Tu som zobrazil všetky tri rámčeky, pôvodné, maskované a farebné.

Teraz musíme opustiť slučku while. Na to môžeme jednoducho implementovať cv2.wait. Key (). V zásade udáva čakaciu dobu, než odpoviete. Ak teda miniete 0, bude čakať nekonečne a 0xFF hovorí, že architektúra je 64bitová. "ord ()" určuje znak, ktorý po stlačení vykoná príkaz break v bloku if a vyjde zo slučky.

Potom cap.release () zatvorí videorekordér a cv2.destroyAllWindows () zatvorí všetky otvorené okná.

Ak máte nejaký problém, dajte mi prosím vedieť.

Odkaz na zdrojový kód:

Odporúča: