Obsah:
- Zásoby
- Krok 1: Import knihoven
- Krok 2: Vytváření kolejnic
- Krok 3: Vytvoření trackbarů pro odstín, sytost a hodnotu
- Krok 4: Jak číst a měnit velikost obrázku
- Krok 5: Čtení hodnot lišty stopy pro její použití na obrázek
- Krok 6: Zobrazení obrázku a nastavení horní a dolní hranice
- Krok 7: Nyní poslední krok
- Krok 8: Konečné výstupy
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Ahoj! Tento instruktáž slouží k tomu, jak extrahovat konkrétní barvu z obrázku v pythonu pomocí knihovny openCV. Pokud jste v této technice nováčkem, nebojte se, na konci této příručky budete moci naprogramovat svůj vlastní program pro detekci barev.
Následují funkce nebo můžeme říci techniky, které se budete učit, 1. Jak číst obrázek
2. Jak vytvořit Track Bars
3. Jak upravit hodnotu odstínu, sytosti a hodnoty obrázku pomocí pruhů stopy
4. A pak bude váš konečný výstup
Můžete sledovat video z výstupu, který jsem připojil níže.
Začněme tedy
Zásoby
- Python 3
- knihovna openCV
- numpy knihovna
Krok 1: Import knihoven
Obrázek je žluté ferrari, jak je znázorněno, a naprogramujeme, aby z tohoto obrázku extrahovala pouze žlutou barvu
Prvním krokem bude import našich knihoven
1. Včetně knihovny openCV. V pythonu se tomu říká cv2
2. Včetně numpy knihovny jako np. "Jako" nám umožňuje být numpy jako np, takže není nutné psát numpy znovu a znovu
Krok 2: Vytváření kolejnic
Track Bars jsou vytvořeny pro úpravu hodnoty Hue, Saturation a Value v obrázku.
cv2.namedWindow („TrackBars“) Tento řádek kódu se používá k vytvoření nového výstupního okna a název okna je uveden jako TrackBars (Můžete zadat libovolné jméno)
cv2.resizeWindow ("TrackBars", 600, 250) Tato funkce slouží ke změně velikosti okna. "TrackBars" je pro které okno chcete změnit velikost, protože jsem chtěl změnit velikost okna TrackBars Napsal jsem to jméno. Následují dvě celá čísla. Těmito dvěma celými čísly jsou šířka a výška. S těmito dvěma čísly si můžete pohrát a změnit velikost
Krok 3: Vytvoření trackbarů pro odstín, sytost a hodnotu
Nyní vytvoříme celkem 6 trackbarů pro odstín, sytost a hodnotu. Každý bude mít dva, tj. 1 pro minimum a 1 pro maximum. Budeme používat funkci createTrackbar openCV. Nejprve uvidíme syntaxi této funkce.
cv2.createTrackbar ("WINDOWNAME", "MAINWINDOWNAME", "RANGE"). Může to být matoucí, ale nebojte se, projdeme každý krok. Mějte na paměti jednu věc, že v openCV hodnoty odstínu jsou 179, sytost je 255 a hodnota je 255
1. Vytvoření TrackBaru pro min. Odstín:
cv2.createTrackbar ("Hue min", "TrackBars", 0, 179, prázdný)
V tomto Hue min je název lišty, TrackBars je hlavní okno, 0 je pozice, na které bude náš posuvník a 179 je rozsah, což znamená, že silder se bude pohybovat od 0-179
2. Vytvoření TrackBar pro hue max:
cv2.createTrackbar („Hue max“, „TrackBars“, 179, 179, prázdný)
V tomto Hue max je název lišty, TrackBars je hlavní okno, 179 je pozice, na které bude náš posuvník a 179 je maximální rozsah, což znamená, že silder se bude pohybovat od 179-0
3. Podobně opakujte kroky pro sat min, sat max, val min a val max, jak je znázorněno na obrázku
Výstupním obrázkem je obrázek s bílým pozadím. Takto budou vypadat vaše lišty
Krok 4: Jak číst a měnit velikost obrázku
cv2.imread () vám umožňuje číst obrázek. Je důležité mít na paměti, že umístění obrázku musí být ve stejné složce, kde je uložen program. Vložíme smyčku while, protože by měla běžet, dokud nebude číst obrázek, nebo můžeme říci, dokud podmínka není pravdivá
img = cv2.imread ("ferrari.jpg")
- V tomto jsem vytvořil název proměnné „img“, do kterého ukládám obrázek
- Do cv2.imread napište název obrázku s jeho příponou do uvozovek
Ke změně velikosti obrázku použijeme funkci cv2.resize. Tato část je volitelná, pokud chcete změnit velikost, můžete použít tuto funkci
Do cv2.resize nejprve napište název proměnné, ve které je obrázek uložen, a poté jeho šířku a výšku
Krok 5: Čtení hodnot lišty stopy pro její použití na obrázek
Dobře, takže teď budeme číst hodnoty lišty lišty, abychom ji mohli použít na náš obrázek. Hodnoty získáme pomocí funkce cv2.getTrackbarPos ().
Začněme tou částí…
h_min = cv2.getTrackbarPos ("Hue min", "TrackBars")
Ve výše uvedeném prohlášení vytvářím název proměnné h_min, do kterého budu ukládat hodnotu Hue min. Takže uvnitř cv2.getTrackbarPos 1. argument by byl „Hue min“, protože chci hodnoty hue min (Pravopis musí být přesně stejný, jako je funkce createTrackbar) a 2. argument by byl název okna lišty, ke kterému patří.
- Opakujte stejný postup pro h_max a zbývající funkce, jak je znázorněno na výše uvedeném obrázku, a poté vytiskněte všechny hodnoty pomocí print ()
- Výstup je zobrazen na druhém obrázku. Tiskne hodnoty h_min, h_max, s_min, s_max, v_min, s_max
Krok 6: Zobrazení obrázku a nastavení horní a dolní hranice
Nyní máme minimální a maximální hodnotu odstínu, sytosti a hodnoty, kterou použijeme k odfiltrování obrazu, abychom mohli určit konkrétní barevný výstup obrázku.
Vytvoříme pro to masku pomocí funkce cv2.inRange. A před tím nastavíme horní a dolní hranici odstínu, sytosti a hodnoty
Vytvořte tedy název proměnné „nižší“a pomocí funkce numpy array nastavte rozsah min pro všechny 3 následujícím způsobem
nižší = np.array ([h_min, s_min, v_min])
Stejný krok opakujte pro horní část
horní = np.array ([h_max, s_max, v_max])
Nyní vytvoříme masku následovně
mask = cv2.inRange (změna velikosti, dolní, horní) Uvnitř cv2.inRang by 1. argumentem byla proměnná, ve které je uložen můj konečný obrázek, 2. argument bude dolní mez a 3. argument bude horní mez.
Nyní zobrazíme hlavní obrázek a masku. K zobrazení použijeme funkci cv2.imshow ()
cv2.imshow ("img", změna velikosti) Slouží k zobrazení hlavního obrázku. 1. argument je název okna, kterému můžete dát libovolné jméno, a 2. argument je proměnná, ve které je uložen můj hlavní obrázek, který chcete zobrazit.
Podobně opakujte kroky pro masku
cv2.imshow ("Výstup", maska)
Krok 7: Nyní poslední krok
V tomto posledním kroku extrahujeme barvu vozu a displeje.
Vytvořil jsem výsledek názvu proměnné. Opět můžete dát libovolné jméno, které chcete. Budeme tedy používat funkci cv2.bitwise_and (), ve které budeme přidávat obrázky společně a vytvářet nový obrázek. A kdekoli jsou pixely na obou obrázcích přítomny, bude to považovat za ano nebo „1“.
result = cv2.bitwise_and (změnit velikost, změnit velikost, maska = maska)
- V tomto bude 1. argument naším obrazem
- Druhý argument bude také naším původním obrázkem, ale bude následovat aplikovaná maska, kterou jsme vytvořili dříve
- A nakonec jen zobrazte výsledek pomocí funkce imshow
Zkopírujte a vložte tento poslední krok, je to jen zpoždění a výstupní okno můžete opustit stisknutím klávesy „a“na klávesnici