|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
[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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
La cattura è semplice, puoi utilizzare le libavformat di ffmpeg; v. ad es. qui:
http://www.inb.uni-luebeck.de/~boehm...ec_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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Come non detto, hanno messo anche l'encoder...
http://lists.mplayerhq.hu/pipermail/...er/018078.html
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#4 |
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
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 |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
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/
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#6 |
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
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 |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Poi fai tu... ![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:24.