2. Capturar imatges
1. Capturar imatges des de la càmera o webcam
Amb Opencv, a banda de manipular imatges emmagatzemades en fitxers, també podem capturar imatges i videos des de la webcam o des d'altres streams de video. Anem a veure primer alguns snippets que ens ajudaran en els nostres programes.
L'equip identifica les càmares connectades amb un número enter, i per a crear un objecte que connecta amb la càmera es farà servir camera = cv2.VideoCapture(camera_index). Amb aquest objecte camera ja podrem fer les captures.
Atenció
Amb aquest mateix mètode també podem obri un arxiu de video (stream) i processar-lo de manera molt similar al stream que produeix una càmera de video
Quan s'utilitza el mètode (retorn,retorn)=cap.read() a OpenCV per llegir d'una capturadora de vídeo, el que es llegeix és un sol fotograma del vídeo en curs. El mètode cap.read() retorna una tupla amb dos valors:
retorn→ Aquest valor booleà indica si la lectura del fotograma ha estat exitosa o no.frame: Aquest és el propi fotograma de vídeo que es llegeix. És una matriu NumPy que conté la informació de la imatge en format de píxels.
El mètode cap.get() s'utilitza per obtenir propietats específiques de la càmera, retornant el valor actual de la propietat sol·licitada. Pot tenir un o dos arguments:
-
Un Argument: Si es proporciona un sol argument, aquest ha de ser un identificador que representi la propietat que es vol obtenir:
-
cv2.CAP_PROP_FRAME_WIDTH: Ample del fotograma. cv2.CAP_PROP_FRAME_HEIGHT: Alt del fotograma.cv2.CAP_PROP_FPS: Fotogrames per segon que permet capturar.cv2.CAP_PROP_POS_FRAMES: Posició del fotograma actual en la seqüència (vídeo).cv2.CAP_PROP_POS_MSEC: Temps actual en mil·lisegons.cv2.CAP_PROP_FRAME_COUNT: Nombre total de fotogrames al vídeo.
Totes aquestes constants tenen valors enters que podem posar o trobar-nos en compte de la pròpia constant. Pots consultar-lo a la documentació de openCV
- Dos Arguments: Si es proporcionen dos arguments, el primer és un identificador de la propietat, i el segon és un valor per defecte que es retorna si la propietat no es pot obtenir.
També disposem de cap.set(arg,value) que s'utilitza per modificar algunes propietats, com els FPS (fotogrames per segon) i la resolució del fotograma. Pot tenir dos arguments:
-
arg→ identificador que representa la propietat que es vol modificar, entre les vistes anteriorment. -
value→ El segon argument és el valor que es vol establir per a la propietat dearg.
És important tenir en compte que no totes les propietats de la capturadora es poden modificar en tots els casos.
Posem la càmera a 640x480 i 30FPS
Quantes càmares tinc i quina és la seua ressolució
Fes una foto i mostra-la
2. Videos
2.1. Llegint imatges de video
Un video no és més que una seqüència de frames. D'aquesta manera OpenCV representa un video de la mateixa manera que el processament d'una càmera. Així doncs si volem obrir un video ho farem de manare molt similar a la càmera:
| Python | |
|---|---|
2.2. Escrivint videos
Per escriure el vídeo, necessites crear un objecte VideoWriter amb els paràmetres adequats.
| Python | |
|---|---|
on els paràmetres son:
-
filename: Nom del fitxer de vídeo de sortida. -
fourcc: Codi de 4 caràcters del codec utilitzat per comprimir els frames. Per exemple,VideoWriter::fourcc('P','I','M','1')és un codec MPEG-1,VideoWriter::fourcc('M','J','P','G')és un codec motion-jpeg, etc. Es pot obtenir una llista de codis a la pàgina Video Codecs by FOURCC. El backend FFMPEG amb contenidor MP4 utilitza altres valors com a codi fourcc: consulta ObjectType, per la qual cosa pot ser que rebeu un missatge d'avís d'OpenCV sobre la conversió del codi fourcc. Consultar aci -
fps: Velocitat de fotogrames de l'stream de vídeo creat. -
frameSize: Mida dels frames del vídeo.
::: example "Example d'escriptura de videos
| Text Only | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
3. Exercici
Es demana un exercici bàsic al processament d'imatges, que és llegir un video i guardar tots els fotogrames en una col·lecció d'imatges. Això pot servir per a la preparació de dataset o l'anàlisi de videos.