INHOUDSOPGAWE:

Eenvoudige kleuropsporing met behulp van OpenCV: 6 stappe
Eenvoudige kleuropsporing met behulp van OpenCV: 6 stappe

Video: Eenvoudige kleuropsporing met behulp van OpenCV: 6 stappe

Video: Eenvoudige kleuropsporing met behulp van OpenCV: 6 stappe
Video: Anil Seth: Neurowetenschappen van het bewustzijn en het zelf 2024, November
Anonim
Eenvoudige kleuropsporing met behulp van OpenCV
Eenvoudige kleuropsporing met behulp van OpenCV

Hi! Vandag gaan ek 'n eenvoudige metode wys om 'n kleur uit 'n lewendige video op te spoor met behulp van OpenCV en python.

Eintlik sal ek net toets of die vereiste kleur in die agtergrondraam voorkom, al dan nie, en met behulp van OpenCV -modules sal ek die gebied masker en die raam gelyktydig vertoon.

Stap 1: Die koptekstlêers

Die koptekste
Die koptekste

Nou hier het ek twee koplêers gebruik, naamlik cv2 en NumPy. Basies is cv2 die OpenCV -biblioteek wat al die c ++ lêers laai wat belangrik is tydens die gebruik van die opdragte in die kodes (dit bevat al die definisies).

En Numpy is 'n luislangbiblioteek wat noodsaaklik is vir die stoor van 'n multidimensionele skikking. Ons sal ons kleurreeks-koördinate stoor.

En numpy as np help basies ons kode om 'n bietjie te verkort deur elke keer np te gebruik in plaas van numpy.

Stap 2: Neem die video op

Die opneem van die video
Die opneem van die video

Dit is redelik eenvoudig terwyl u python gebruik. Hier hoef ons net die video -opnemer aan te skakel sodat die rame kan begin opneem.

Nou dui die waarde in die VideoCapture die kamera aan, in my geval is die kamera aan my skootrekenaar gekoppel, dus 0.

U kan op dieselfde manier as 1 vir die sekondêre kamera gaan, ens. VideoCapture skep die voorwerp daarvoor.

Stap 3: Vang raam en definieer kleur

Maak raam vas en definieer kleur
Maak raam vas en definieer kleur

Nou hier moet ons iets doen sodat ons die onmiddellike raam van die video kan vaslê, wat ons sal help om die beeld uit te haal en daaraan kan werk volgens die vereiste.

'while' lus sal ons help om die lus na die vereiste tyd te neem. Nou word "_, frame = cap.read ()" gebruik om die geldigheid van die vasgelegde raam te kontroleer en dit te stoor. "cap.read () is 'n Booleaanse veranderlike en gee waar terug as die raam korrek gelees word, en as u geen rame kry nie, sal dit geen fout toon nie;

Nou definieer reël 11 en reël 12 basies die kleurreeks wat ons moet opspoor. Hiervoor het ek die blou kleur gebruik.

U kan voortgaan met enige kleur wat u nodig het om net BGR -waardes vir die spesifieke kleur in te tik. Dit is beter om twee skikkings te definieer met behulp van numpy skikkings, aangesien die opsporing van 'n bepaalde kleur in die werklike wêreld nie ons doel sal dien nie, maar ons definieer 'n reeks blou kleure sodat dit binne die reeks kan opspoor.

Hiervoor het ek twee veranderlikes gedefinieer wat die onderste BGR -waardes en die boonste BGR -waardes stoor.

Stap 4: Maskering en onttrekking

Maskering en onttrekking
Maskering en onttrekking

Die belangrikste taak is om die raam te masker en die kleur van die raam te onttrek. Ek het die vooraf gedefinieerde opdragte in die biblioteek in OpenCV gebruik om die maskering te doen. Maskering is in werklikheid die proses om 'n gedeelte van die raam te verwyder, dit wil sê, ons sal die pixels verwyder waarvan die kleur BGR -waardes nie in die gedefinieerde kleurreeks lê nie, en dit word gedoen deur cv2.inRange. Daarna pas ons die kleurreeks toe op die gemaskerde beeld, afhangende van die pixelwaardes, en hiervoor gebruik ons cv2.bitwise_and, dit sal die kleure eenvoudig toewys aan die gemaskerde gebied, afhangende van die masker- en kleurreekswaardes.

Skakel vir cv2. bitwise_and:

Stap 5: Uiteindelik vertoon

Uiteindelik vertoon!
Uiteindelik vertoon!

Hier het ek die basiese cv2.imshow () gebruik om vir elke raam as beeld te vertoon. Aangesien ek die raamdata in veranderlikes gestoor het, kan ek dit in imshow () ophaal. Hier het ek al die drie rame, oorspronklik, gemaskerd en gekleurd, vertoon.

Nou moet ons uit die while -lus gaan. Hiervoor kan ons eenvoudig die cv2.wait. Key () implementeer. Dit vertel basies die wagtyd voordat u reageer. As u dus 0 slaag, wag dit oneindig en 0xFF sê dat die argitektuur 64bit is. "ord ()" spesifiseer die karakter wat, wanneer ingedruk word, die breekopdrag in if block sal uitvoer en dit uit die lus sal kom.

Dan sluit cap.release () die video -opnemer en cv2.destroyAllWindows () sluit alle oop vensters.

Laat weet my as u probleme ondervind.

Skakel na bronkode:

Aanbeveel: