Tartalomjegyzék:

Egyszerű színfelismerés az OpenCV használatával: 6 lépés
Egyszerű színfelismerés az OpenCV használatával: 6 lépés

Videó: Egyszerű színfelismerés az OpenCV használatával: 6 lépés

Videó: Egyszerű színfelismerés az OpenCV használatával: 6 lépés
Videó: Grimm’s ihlette bagolycsalád 🌈 2024, November
Anonim
Egyszerű színfelismerés az OpenCV használatával
Egyszerű színfelismerés az OpenCV használatával

Szia! Ma egy egyszerű módszert mutatok be egy szín észlelésére élő videóból OpenCV és python segítségével.

Alapvetően csak azt fogom tesztelni, hogy a kívánt szín jelen van -e a háttérkeretben, vagy sem, és az OpenCV modulok használatával elfedem ezt a régiót, és egyidejűleg megjelenítem a keretet.

1. lépés: A fejlécfájlok

A fejlécfájlok
A fejlécfájlok

Most itt két fejlécfájlt használtam, nevezetesen a cv2 és a NumPy. Alapvetően a cv2 az OpenCV könyvtár, amely betölti az összes c ++ fájlt, amelyek fontosak a kódokban lévő parancsok használata közben (tartalmazza az összes definíciót).

A Numpy pedig egy python -könyvtár, amely elengedhetetlen a többdimenziós tömb tárolásához. A színtartomány koordinátáinak tárolására használjuk.

A numpy as np pedig alapvetően segít a kódunknak, hogy kicsit lerövidüljön, ha minden alkalommal np -t használunk a numpy helyett.

2. lépés: A videó rögzítése

A videó rögzítése
A videó rögzítése

Ez nagyon egyszerű python használata közben. Itt csak be kell kapcsolnunk a videofelvevőt, hogy elkezdhesse rögzíteni a képkockákat.

Most a VideoCapture -n belüli érték jelzi a kamerát, az én esetemben a kamera csatlakozik a laptopomhoz, tehát 0.

Hasonlóan léphet az 1 -hez a másodlagos fényképezőgéphez és így tovább. A VideoCapture létrehozza az objektumot.

3. lépés: A kép rögzítése és a szín meghatározása

A kép rögzítése és a szín meghatározása
A kép rögzítése és a szín meghatározása

Most itt tennünk kell valamit, hogy rögzíthessük a videó azonnali képkockáját, amely segít a kép kibontásában, és ezen dolgozhatunk a követelményeknek megfelelően.

A "while" ciklus segít abban, hogy a ciklust a kívánt időre futtassuk. Most a "_, frame = cap.read ()" a lefoglalt keret érvényességének ellenőrzésére és tárolására szolgál. "A cap.read () egy logikai változó, és igaz értéket ad vissza, ha a keretet helyesen olvassuk, és ha nem kap kereteket, akkor nem fog semmilyen hibát megjeleníteni, egyszerűen a None értéket kapja.

Most a 11. sor és a 12. sor alapvetően meghatározza azt a színtartományt, amelyet észlelnünk kell. Ehhez szoktam a kék színt.

Bármilyen színnel folytathatja, ha csak be kell írnia a BGR értékeket az adott színhez. Jobb, ha két tömböt definiáló tömbökkel határozunk meg, mivel egy adott szín észlelése a valós világban nem szolgálja a célunkat, inkább a kék szín tartományát határozzuk meg, hogy a tartományon belül érzékelje.

Ehhez két változót definiáltam, amelyek az alsó BGR értékeket és a felső BGR értékeket tárolják.

4. lépés: Maszkolás és kivonás

Maszkolás és kivonás
Maszkolás és kivonás

Most itt a fő feladat a keret elfedése és a keret színének kinyerése. A maszkoláshoz az OpenCV könyvtárában található előre meghatározott parancsokat használtam. Alapvetően a maszkolás a keret bizonyos részének eltávolítása, azaz eltávolítjuk azokat a képpontokat, amelyek színének BGR értékei nem a megadott színtartományban vannak, és ezt a cv2.inRange végzi. Ezt követően a színtartományt a maszkolt képre alkalmazzuk, a pixelértékektől függően, és ehhez a cv2.bitwise_and értéket fogjuk használni, egyszerűen hozzárendeli a színeket a maszkolt területhez, a maszk és a színtartomány értékeitől függően.

Link a cv2 -hez. bitwise_and:

5. lépés: Végül megjelenik

Végre megjelenik!
Végre megjelenik!

Itt az alapvető cv2.imshow () - t használtam az egyes keretek képként való megjelenítéséhez. Mivel a keretadatok változókban vannak tárolva, le tudom őket szerezni az imshow () fájlban. Itt megjelenítettem mind a három keretet, eredeti, maszkos és színes.

Most ki kell lépnünk a while ciklusból. Ehhez egyszerűen megvalósíthatjuk a cv2.wait. Key () parancsot. Alapvetően a várakozási időt jelzi, mielőtt válaszol. Tehát ha átadja a 0 -t, akkor végtelenül várni fog, és a 0xFF azt mondja, hogy az architektúra 64 bites. Az "ord ()" megadja azt a karaktert, amelyet megnyomáskor a break parancs végrehajtja az if blokkban, és az kilép a ciklusból.

Ezután a cap.release () bezárja a videofelvevőt, a cv2.destroyAllWindows () pedig az összes megnyitott ablakot.

Ha bármilyen problémája van, kérjük, tudassa velem.

Link a forráskódhoz:

Ajánlott: