Obsah:

Jednoduchá detekce barev pomocí OpenCV: 6 kroků
Jednoduchá detekce barev pomocí OpenCV: 6 kroků

Video: Jednoduchá detekce barev pomocí OpenCV: 6 kroků

Video: Jednoduchá detekce barev pomocí OpenCV: 6 kroků
Video: Leap Motion SDK 2024, Červen
Anonim
Jednoduchá detekce barev pomocí OpenCV
Jednoduchá detekce barev pomocí OpenCV

Ahoj! Dnes ukážu jednoduchou metodu detekce barvy ze živého videa pomocí OpenCV a pythonu.

V zásadě jen vyzkouším, zda je požadovaná barva v rámečku na pozadí přítomna nebo ne, a pomocí modulů OpenCV tuto oblast zamaskuji a současně zobrazím rámeček.

Krok 1: Soubory záhlaví

Soubory záhlaví
Soubory záhlaví

Tady jsem použil dva soubory záhlaví, konkrétně cv2 a NumPy. Cv2 je v zásadě knihovna OpenCV, která načítá všechny soubory c ++, které jsou důležité při používání příkazů v kódech (obsahuje všechny definice).

A Numpy je knihovna pythonu, která je nezbytná pro ukládání vícerozměrného pole. Budeme používat k uložení našich souřadnic barevného rozsahu.

A numpy jako np v zásadě pomáhá našemu kódu trochu zkrátit pomocí np pokaždé místo numpy.

Krok 2: Pořízení videa

Pořizování videa
Pořizování videa

Při používání pythonu je to velmi jednoduché. Zde stačí zapnout videorekordér, aby mohl začít nahrávat snímky.

Nyní hodnota uvnitř VideoCapture označuje kameru, v mém případě je kamera připojena k mému notebooku, takže 0.

Můžete jít podobně jako 1 pro sekundární kameru a tak dále. VideoCapture pro to vytvoří objekt.

Krok 3: Zachycení rámečku a definování barev

Zachycení rámečku a definování barev
Zachycení rámečku a definování barev

Nyní zde musíme něco udělat, abychom mohli zachytit okamžitý snímek videa, který nám pomůže extrahovat obrázek, a můžeme na tom pracovat podle požadavku.

Smyčka „while“nám pomůže spustit smyčku na požadovaný čas. Nyní "_, frame = cap.read ()" slouží ke kontrole platnosti zachyceného rámce a jeho uložení. „Cap.read () je boolean variabilní a vrací true, pokud je rám správně číst a pokud se dostanete bez rámů nebude vykazovat žádné chyby, budete jednoduše dostat Žádné.

Nyní řádek 11 a řádek 12 v podstatě definují rozsah barev, které potřebujeme detekovat. K tomu jsem použil modrou barvu.

Můžete pokračovat jakoukoli barvou, pro kterou potřebujete pouze zadat hodnoty BGR pro tuto konkrétní barvu. Je lepší definovat dvě pole pomocí numpy polí, protože detekce konkrétní barvy v reálném světě nebude sloužit našemu účelu, spíše definujeme rozsah modré barvy tak, aby detekoval v rozsahu.

Za tímto účelem jsem definoval dvě proměnné, které ukládají nižší hodnoty BGR a horní hodnoty BGR.

Krok 4: Maskování a extrahování

Maskování a extrahování
Maskování a extrahování

Nyní přichází hlavní úkol maskování rámečku a extrahování barvy rámečku. K maskování jsem použil předdefinované příkazy přítomné v knihovně v OpenCV. V zásadě je maskování proces odebrání určité části rámce, tj. Odstraníme pixely, jejichž hodnoty BGR barev, které neleží v definovaném barevném rozsahu, se provádí pomocí cv2.inRange. Poté aplikujeme barevný rozsah na maskovaný obrázek v závislosti na hodnotách pixelů, a proto použijeme cv2.bitwise_and, jednoduše přiřadí barvy maskované oblasti v závislosti na hodnotách masky a barevného rozsahu.

Odkaz na cv2. bitwise_and:

Krok 5: Konečně zobrazení

Konečně zobrazení!
Konečně zobrazení!

Zde jsem použil základní cv2.imshow () pro zobrazení pro každý snímek jako obrázek. Protože mám data rámců uložená v proměnných, mohu je načíst v imshow (). Zde jsem zobrazil všechny tři rámečky, původní, maskované a barevné.

Nyní musíme opustit smyčku while. K tomu můžeme jednoduše implementovat cv2.wait. Key (). V zásadě říká dobu čekání, než odpoví. Pokud tedy projdete 0, bude čekat nekonečně a 0xFF říká, že architektura je 64bitová. "ord ()" určuje znak, který po stisknutí spustí příkaz break v bloku if a vyjde ze smyčky.

Poté cap.release () zavře videorekordér a cv2.destroyAllWindows () zavře všechna otevřená okna.

Pokud máte nějaký problém, dejte mi prosím vědět.

Odkaz na zdrojový kód:

Doporučuje: