View Full Version : [C] Acquisire immagini da webcam sotto Linux
Ciao a tutti,
devo fare un'applicazione che salvi su disco immagini catturate da webcam in formato bmp. L'applicazione deve essere in linguaggio C e deve funzionare sotto linux. Putroppo ho delle difficoltà perchè non so come prelevare un frame dalla webcam in modo da poterlo poi salvare come file in formato bmp. C'è qualcuno che sa darmi una mano magari dandomi qualche dritta o inviandomi qualche link utile????
grazie mille
ilsensine
04-06-2007, 13:04
La cattura è semplice, puoi utilizzare le libavformat di ffmpeg; v. ad es. qui:
http://www.inb.uni-luebeck.de/~boehme/libavcodec_update.html
La scrittura in rgb (non so perché devi usare proprio questo formato) devi farla "a mano", in quanto le libavcodec non contengono l'"encoder" rgb. Non è complicato, tutto sommato:
http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/
Se puoi usare un altro tipo di formato (png, gif, jpeg...) puoi usare le funzioni delle libavformat/libavcodec.
ilsensine
04-06-2007, 13:09
Come non detto, hanno messo anche l'encoder...
http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2006-October/018078.html
ciao,
intanto grazie per l'aiuto. In pratica io vorrei utilizzare, sia per l'apertura del dispositivo video sia per la cattura dei frame, le funzioni che ci sono nelle librerie
#include <sys/ioctl.h>
#include <linux/videodev.h>
ed evitare di utilizzare altre librerie come quella che mi ha i consigliato tu perchè questa applicazione deve essere cross compilata per un'architettura ARM e non so se, con altre librerie, posso avere problemi.
Il codice per aprire e chiudere il dispositivo video l'ho trovato
#include <fcntl.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <linux/videodev.h>
int main(int argc, const char *argv[])
{
// open video
printf ("Open %s\n", VIDEO_DEV);
int fd = open (VIDEO_DEV, O_RDONLY);
if (fd < 0) {
fprintf (stderr, "*** Open error\n");
perror(VIDEO_DEV);
exit (1);
}
...
...
...
// close
close(fd);
}
ora mi manca la parte per la cattura del frame e la memorizzazione in formato bmp.
Sapresti darmi una mano??
grazie ancora
ilsensine
04-06-2007, 13:34
ciao,
intanto grazie per l'aiuto. In pratica io vorrei utilizzare, sia per l'apertura del dispositivo video sia per la cattura dei frame, le funzioni che ci sono nelle librerie
#include <sys/ioctl.h>
#include <linux/videodev.h>
ed evitare di utilizzare altre librerie come quella che mi ha i consigliato tu perchè questa applicazione deve essere cross compilata per un'architettura ARM
Le libavc si cross-compilano tranquillamente per ARM.
Se proprio vuoi procedere direttamente, cerca una guida su v4l (o v4l2, a seconda del tuo kernel). Il salvataggio in bmp devi farlo a mano ovviamete.
Ma non vedo perché dovresti toglierti i "piaceri della vita" (ovvero: i sorgenti e la loro portabilità), vista anche l'esistenza di strumenti tipo questo:
http://www.openembedded.org/
ok visto che sei sicuro che le libavc si cross compilano perfettamente provo ad usare queste che mi sa che risparmio un po di tempo.
grazie mille
ilsensine
04-06-2007, 13:43
ok visto che sei sicuro che le libavc si cross compilano perfettamente provo ad usare queste che mi sa che risparmio un po di tempo.
grazie mille
Veramente se lavori in campo embedded ti ho dato un link che vale platino.
Poi fai tu... :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.