Taula de continguts:

Detecció senzilla de colors mitjançant OpenCV: 6 passos
Detecció senzilla de colors mitjançant OpenCV: 6 passos

Vídeo: Detecció senzilla de colors mitjançant OpenCV: 6 passos

Vídeo: Detecció senzilla de colors mitjançant OpenCV: 6 passos
Vídeo: IDENTIFICADOR COLORS LABVIEW 2024, Juny
Anonim
Detecció senzilla de colors mitjançant OpenCV
Detecció senzilla de colors mitjançant OpenCV

Hola! Avui mostraré un mètode senzill de detecció d’un color d’un vídeo en directe mitjançant OpenCV i python.

Bàsicament, només provaré que el color requerit estigui present o no en el marc de fons i utilitzant mòduls OpenCV emmascararé aquesta regió i mostraré simultàniament el marc.

Pas 1: els fitxers de capçalera

Els fitxers de capçalera
Els fitxers de capçalera

Ara he utilitzat dos fitxers de capçalera cv2 i NumPy. Bàsicament cv2 és la biblioteca OpenCV que carrega tots els fitxers c ++ que són importants mentre s’utilitzen les ordres dels codis (conté totes les definicions).

I Numpy és una biblioteca python que és essencial per emmagatzemar una matriu multidimensional. Farem servir per emmagatzemar les nostres coordenades de gamma de colors.

I numpy com a np bàsicament ajuda al nostre codi a escurçar-se una mica fent servir np cada vegada en lloc de numpy.

Pas 2: captura del vídeo

Captura del vídeo
Captura del vídeo

Això és bastant senzill mentre s’utilitza Python. Aquí només hem d’encendre la gravadora de vídeo perquè pugui començar a gravar els fotogrames.

Ara el valor dins del VideoCapture indica la càmera, en el meu cas la càmera està connectada al meu ordinador portàtil, de manera que 0.

Podeu anar de manera similar a 1 per a la càmera secundària, etc. VideoCapture crea l'objecte per a això.

Pas 3: captura del marc i definició del color

Captura de marcs i definició del color
Captura de marcs i definició del color

Ara hem de fer alguna cosa perquè puguem capturar el fotograma instantani del vídeo que ens ajudi a extreure la imatge i puguem treballar-hi segons els requisits.

bucle "while" ens ajudarà a executar el bucle al nostre temps requerit. Ara "_, frame = cap.read ()" s'utilitza per comprovar la validesa del Frame capturat i emmagatzemar-lo. "cap.read () és una variable booleana i torna true si el marc es llegeix correctament i, si no obteniu cap marc, no mostrarà cap error, simplement obtindreu Cap.

Ara la línia 11 i la línia 12 defineixen bàsicament l’interval de color que hem de detectar. Per a això, he acostumat al color blau.

Podeu continuar amb qualsevol color per al qual necessiteu només escriure valors BGR per a aquell color en particular. És millor definir dues matrius que utilitzen matrius numpy ja que la detecció d’un color concret al món real no servirà per al nostre propòsit, sinó que definirem un rang de color blau perquè es detecti dins de l’interval.

Per a això, he definit dues variables que emmagatzemen els valors BGR inferiors i els valors BGR superiors.

Pas 4: emmascarament i extracció

Emmascarament i extracció
Emmascarament i extracció

Ara ve la tasca principal d’emmascarar el marc i extreure el color del marc. He utilitzat les ordres predefinides presents a la biblioteca a OpenCV per fer l’emmascarament. Bàsicament l’emmascarament és el procés d’eliminació d’alguna porció del marc, és a dir, eliminarem els píxels els valors dels quals BGR de color no es trobin en l’interval de colors definit i això es fa mitjançant cv2.inRange. Després, apliquem el rang de color a la imatge emmascarada en funció dels valors de píxels i, per a això, utilitzarem cv2.bitwise_and, simplement assignarà els colors a la regió emmascarada en funció dels valors de la màscara i del rang de colors.

Enllaç per a cv2. bitwise_and:

Pas 5: finalment es mostra

Per fi es mostra!
Per fi es mostra!

Aquí he utilitzat cv2.imshow () bàsic per mostrar per a cada fotograma com a imatge. Com que tinc les dades del marc emmagatzemades en variables, les puc recuperar a imshow (). Aquí he mostrat els tres marcs, originals, emmascarats i de colors.

Ara hem de sortir del bucle while. Per a això, simplement podem implementar cv2.wait. Key (). Bàsicament indica el temps d'espera abans de respondre. Així que si passes 0, esperarà infinitament i 0xFF diu que l'arquitectura és de 64 bits. "ord ()" especifica el caràcter que, quan es prem, executarà l'ordre break en si bloqueja i sortirà del bucle.

A continuació, cap.release () tanca la gravadora de vídeo i cv2.destroyAllWindows () tanca totes les finestres obertes.

Si teniu algun problema, feu-m'ho saber.

Enllaç al codi font:

Recomanat: