INHOUDSOPGAWE:

OpenCV basiese projekte: 5 stappe
OpenCV basiese projekte: 5 stappe

Video: OpenCV basiese projekte: 5 stappe

Video: OpenCV basiese projekte: 5 stappe
Video: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, Julie
Anonim
OpenCV basiese projekte
OpenCV basiese projekte

In hierdie projek ondersoek ons 'n paar basiese OpenCV -funksies deur middel van vier eenvoudige projekte wat 'n lewendige videostroom insluit. Dit is gesigsherkenning, agtergrondverwydering, spesiale visuele weergawe van rande en die toepassing van 'n vervaagde effek op die lewendige videostroom. My hoofdoel om hierdie projekte te probeer, was om eenvoudig my voete nat te maak met die OpenCV -koppelvlak, aangesien ek van plan is om dieper te kyk op die gebied van rekenaarvisie

Voorrade

  • Rekenaar met Python
  • Open CV -biblioteek, Numpy -biblioteek, tkinter -biblioteek, sys -biblioteek
  • Kamera om aan te sluit op 'n rekenaar (as die rekenaar dit nie reeds bevat nie)
  • Program se python -lêer (ingesluit in hierdie instruksies)
  • haarcascade xml -lêer (ingesluit in hierdie instruksies)

Stap 1: FaceDetect -funksie

FaceDetect -funksie
FaceDetect -funksie
FaceDetect -funksie
FaceDetect -funksie

Hierdie funksie wys die video van u kamera met groen vierkante op enige gesigte wat dit optel. In die kode gebruik ons die funksie cv2. VideoCapture () om die video wat ons opneem, te stoor in 'n voorwerp met die naam "capture". Die CAPTURE_INDEX is 'n nommer wat deur u rekenaar gestel is en wat ooreenstem met die indeks van u kamera in die video -invoerlys van die rekenaar. As daar nie 'n buitekamera op u rekenaar is nie, behoort 0 of 1 te werk.

Die face_cascade -voorwerp word geïnisialiseer met behulp van die cascadeClassifier -funksie en die lêer "haarcascade_frontalface_default.xml" wat in die OpenCV -github gevind word. Ons gebruik hierdie voorwerp om die gesigte wat in die lys "gesigte" opgespoor word, op te slaan as 'n ingang vier-rigting-tupel wat die gesigte x koördinaat, y koördinaat, breedte en hoogte hou. Ons teken dan 'n reghoek wat die gesig perfek omhul met behulp van die cv2.rectangle -funksie

Uit hierdie video neem OpenCV baie beelde in ons lus met behulp van capture.read () en stoor die beeld in 'n raam wat ons 'img' genoem het. Elke beeld word dan geïnterpreteer en gewysig soos ons wil. Vir faceDetect maak ons die beeld grys met behulp van die cvtColor -funksie wat die beeld wat in die eerste parameter gegee word, omskakel na 'n spesifieke tipe beeldkleur wat in die tweede parameter gespesifiseer word. Die lys met aanvaarbare waardes vir die tweede parameter kan aanlyn gevind word. Ons vertoon die prent dan in 'n venster met die naam "Detecting the face" met behulp van die imshow () -funksie wat 'n string benodig vir die vensternaam en die raam wat vertoon moet word.

Uiteindelik wag ons op die gebruiker om die q -sleutel in te voer met die funksie cv2.waitKey (). Die 0xFF -masker word gebruik as 'n konvensie vir 64 -bit rekenaars. Nadat die gebruiker die videostroom beëindig het, bevry die faceDetect -funksie die opname -voorwerp en vernietig dan alle ander vensters wat onder die OpenCV -koppelvlak oopgemaak is. Al die ander funksies volg 'n soortgelyke ontwerpstruktuur.

Stap 2: BackgroundRemove -funksie

Agtergrond Verwyder funksie
Agtergrond Verwyder funksie
Agtergrond Verwyder funksie
Agtergrond Verwyder funksie

Hierdie funksie poog om die agtergrondgedeelte van ons video te verwyder en slegs die voorgrondbeeld te laat. Dit werk moontlik nie op sommige kameras nie, aangesien dit gebruik maak van 'n beligtingaanpassingsfunksie wat geaktiveer word wanneer verskillende voorwerpe/ fokuspunte die raam binnekom. As u agtergrondverwyderingsfunksie nie werk nie, moenie bekommerd wees nie; dit kan net u kamera wees!

Om hierdie funksie te gebruik, stap weg van die kameraramme en druk op die "d" -knoppie om die agtergrondbeeld op te neem. Dit is belangrik dat daar geen bewegende voorwerpe op die agtergrond is wat u wil opneem nie. Dan kan ons terug in die kameraram stap. As die funksie gewerk het, moet die gebruiker hulself slegs in die videostroom van die funksie sien. Enige geraas/swart kolle op die voorgrond kan die gevolg wees van die beligting van die kamera. Om 'n ander agtergrond vas te lê, druk die "r" -toets om weer te begin, en druk dan weer op "d".

'N Belangrike uitweg vir hierdie funksie is die gebruik van die "vlag" Boolean wat opgehef word sodra die gebruiker op die d-knoppie druk. Dit maak die agtergrond vas en stel ons in staat om dit te verwyder uit die video wat deur die funksie gestroom word. Ons streef daarna om die agtergrondprent in ref_img te stoor, sodat ons dit kan onderskei van die voorgrondbeeld, wat enige bewegende voorwerp vang. Ons gebruik die funksie cv2.subtract () om die voorgrondbeeld van die agtergrondbeeld af te trek en omgekeerd, en kanselleer dan onmiddellik daarna die kleinste verskille in die twee beelde. Die agtergrond is verduister.

Die fgmask word gemaak met behulp van die verskil tussen hierdie twee beelde en word dan op die funksiestroomstroom toegepas met behulp van die OpenCV cv2.bitwise_and () -funksie.

Stap 3: VideoEdges -funksie

VideoEdges -funksie
VideoEdges -funksie
VideoEdges -funksie
VideoEdges -funksie

Hierdie funksie gee 'n lewendige videostroom terug, maar die waarneembare rande word wit gemaak terwyl al die ander verduister word. Wat hierdie funksie van die ander funksies onderskei, is die omskakeling van ons oorspronklike video van RBG-formaat na HSV, wat staan vir kleur, versadiging en variasie- 'n ander manier om lig en kleur van 'n video te verwerk. Met hierdie metode kan ons die buitelyne in die video makliker onderskei deur 'n filter toe te pas (rooi_ laag tot rooi_hoog).

Canny Edge Detection word gebruik om die rande in 'n prent op te spoor. Dit aanvaar 'n grysskaalbeeld as invoer en gebruik 'n meertrap -algoritme.

Stap 4: VideoBlur -funksie

VideoBlur -funksie
VideoBlur -funksie
VideoBlur -funksie
VideoBlur -funksie

Hierdie funksie word gebruik om 'n vervaag -effek by ons videostroom te voeg. Die funksie noem eenvoudig die GaussianBlur cv2 -funksie op ons raam. Meer inligting oor die gaussianBlur -funksie kan hier gevind word:

opencv-python-tutroals.readthedocs.io/en/l…

Stap 5: Verbeterings

Die mees sensitiewe funksie in hierdie projek is die agtergrondverwyderingsfunksie, aangesien dit die gebruik van 'n kamera benodig wat nie funksies vir beligtingaanpassing het nie. Daar is moontlik 'n beter stel funksies in die OpenCV -biblioteek wat hierdie beligting kan aanpas en die agtergrond glad kan verwyder (soortgelyk aan 'n groen skerm).

Ons kan ook ander gesigsopsporingsfunksies gebruik wat voorwerpe met meer funksies kan produseer, behalwe net die terugvoer van (x, y) koördinate. Miskien sou 'n gesigsherkenningsprogram met die vermoë om gesigte te onthou nie te moeilik wees om te implementeer nie.

Die vervagingfunksie kan meer aangepas word deur intuïtiewe beheer deur die gebruiker. Die gebruiker wil byvoorbeeld die intensiteit van die vervagingseffek aanpas of 'n spesifieke gebied binne die raam kies om te vervaag.

Aanbeveel: