Turinys:

Paprastas spalvų aptikimas naudojant „OpenCV“: 6 žingsniai
Paprastas spalvų aptikimas naudojant „OpenCV“: 6 žingsniai

Video: Paprastas spalvų aptikimas naudojant „OpenCV“: 6 žingsniai

Video: Paprastas spalvų aptikimas naudojant „OpenCV“: 6 žingsniai
Video: Niagara bullet hell game How to UE4 | Niagara collision projectile 2024, Birželis
Anonim
Paprastas spalvų aptikimas naudojant „OpenCV“
Paprastas spalvų aptikimas naudojant „OpenCV“

Sveiki! Šiandien aš parodysiu paprastą būdą aptikti spalvą iš tiesioginio vaizdo įrašo naudojant „OpenCV“ir „python“.

Iš esmės aš tik išbandysiu, ar reikiama spalva yra fono rėme, ar ne, o naudojant „OpenCV“modulius aš užmaskuosiu tą regioną ir tuo pačiu parodysiu rėmelį.

1 žingsnis: antraštės failai

Antraštės failai
Antraštės failai

Dabar čia aš naudoju du antraštės failus, būtent cv2 ir NumPy. Iš esmės cv2 yra „OpenCV“biblioteka, kurioje įkeliami visi svarbūs „c ++“failai naudojant kodų komandas (joje yra visi apibrėžimai).

„Numpy“yra „Python“biblioteka, kuri yra būtina norint išsaugoti daugialypį masyvą. Mes naudosime savo spalvų diapazono koordinates.

Ir numpy as np iš esmės padeda mūsų kodui šiek tiek sutrumpėti, kiekvieną kartą vietoj numpy naudojant np.

2 veiksmas: vaizdo įrašo fiksavimas

Vaizdo įrašo fiksavimas
Vaizdo įrašo fiksavimas

Tai gana paprasta naudojant python. Čia mums tiesiog reikia įjungti vaizdo įrašymo įrenginį, kad jis galėtų pradėti įrašinėti kadrus.

Dabar „VideoCapture“vertė rodo kamerą, mano atveju fotoaparatas yra prijungtas prie nešiojamojo kompiuterio, taigi 0.

Galite pasirinkti panašiai kaip 1 antrinei kamerai ir pan. „VideoCapture“sukuria jam objektą.

3 žingsnis: kadro fiksavimas ir spalvos nustatymas

Rėmelio fiksavimas ir spalvos apibrėžimas
Rėmelio fiksavimas ir spalvos apibrėžimas

Dabar mes turime ką nors padaryti, kad galėtume užfiksuoti momentinį vaizdo įrašo kadrą, kuris padės mums išgauti vaizdą ir galėtume tai įgyvendinti pagal reikalavimus.

ciklas „while“padės mums atlikti ciklą iki mūsų reikalaujamo laiko. Dabar „_, frame = cap.read ()“naudojamas užfiksuoto kadro teisingumui patikrinti ir išsaugoti. cap.read () yra loginis kintamasis ir grąžina true, jei kadras yra teisingai perskaitytas ir jei negausite kadrų, jis nerodys jokios klaidos, jūs tiesiog gausite None.

Dabar 11 ir 12 eilutės iš esmės apibrėžia spalvų diapazoną, kurį turime aptikti. Tam aš pripratau prie mėlynos spalvos.

Galite tęsti bet kokią spalvą, kurią jums reikia tiesiog įvesti tos spalvos BGR reikšmes. Geriau apibrėžti du masyvus, naudojant numpy masyvus, nes tam tikros spalvos aptikimas realiame pasaulyje neatitiks mūsų tikslo, o mes nustatysime mėlynos spalvos diapazoną, kad jis aptiktų diapazoną.

Tam aš apibrėžiau du kintamuosius, kuriuose saugomos apatinės ir viršutinės BGR vertės.

4 žingsnis: maskavimas ir ištraukimas

Maskavimas ir ištraukimas
Maskavimas ir ištraukimas

Dabar čia ateina pagrindinis uždavinys užmaskuoti rėmą ir išgauti rėmo spalvą. Maskavimui naudoju iš anksto nustatytas komandas, esančias „OpenCV“bibliotekoje. Iš esmės maskavimas yra tam tikros kadro dalies pašalinimo procesas, t.y. mes pašalinsime taškus, kurių spalvos BGR reikšmės neatitinka nustatyto spalvų diapazono, ir tai daro cv2.inRange. Vėliau užmaskuotam vaizdui pritaikome spalvų diapazoną, priklausomai nuo pikselių reikšmių, ir tam naudosime cv2.bitwise_and, jis tiesiog priskirs spalvas užmaskuotam regionui, priklausomai nuo kaukės ir spalvų diapazono verčių.

Cv2 nuoroda. bitwise_and:

5 žingsnis: pagaliau rodomas

Pagaliau rodomas!
Pagaliau rodomas!

Čia aš naudoju pagrindinį cv2.imshow (), kad būtų rodomas kiekvienas kadras kaip vaizdas. Kadangi rėmo duomenys yra saugomi kintamuosiuose, galiu juos gauti imshow (). Čia aš parodžiau visus tris rėmelius - originalius, užmaskuotus ir spalvotus.

Dabar turime išeiti iš ciklo „while“. Norėdami tai padaryti, galime tiesiog įdiegti cv2.wait. Key (). Iš esmės tai nurodo laukimo laiką prieš atsakant. Taigi, jei praeisite 0, jis lauks be galo, o 0xFF nurodo, kad architektūra yra 64 bitų. „ord ()“nurodo simbolį, kuris paspaudus vykdys „break“komandą „if“bloke ir išeis iš ciklo.

Tada cap.release () uždaro vaizdo įrašymo įrenginį, o cv2.destroyAllWindows () uždaro visus atidarytus langus.

Jei turite kokių nors problemų, praneškite man.

Nuoroda į šaltinio kodą:

Rekomenduojamas: