Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
sto cercando di sviluppare una piccola applicazione (c++) che acquisisca una immagine da una webcam usb (già riconosciuta con driver spca).
In pratica non ho capito bene come si tira fuori un'immagine dal dispositivo /dev/video0 .
Qualcuno ha avuto esperienze al riguardo? Magari esistono delle librerie che fanno questo lavoro senza che mi metto a trattare a mano i byte che escono dalla webcam...
Be, potresti dare una spulciata a questo sito, tanto per cominciare http://www.smcc.demon.nl/camstream/
Se invece vuoi partire da zero credo tu debba dare un'occhiata al sito di V4L.
una libreria con la quale il tutto e piuttosto semplice sarebbe opencv (la trovi su slacky)
Dai un occhiata alla documentazione, in particolare alla libreria highgui, dove trovi anche esempi
Sembra che faccia al caso mio se non altro per le potenzialità di elaborazione delle immagini. Per quanto riguarda l'acquisizione da webcam non ho ancora capito come si fa ma a giudicare dalla documentazione sembra possibile...
il tutto e trasparente rispetto al vero sistema che ce sotto (v4l su linux e directx su windows). Vantaggio e appunto l'indipendenza dal sistema operativo (si puo preservare anche usando qt o wxwidgets se la libreria highgui e troppo limitata per il prorpio scopo), svantaggio e che puoi fare poco se ci sono problemi.
comunque trovi molto a riguardo, ecco un piccolo esempio
#include <cv.h>
#include <highgui.h>
#include <iostream>
int main(int argc, char* argv[])
{
//la finestra su cui visulizzare il tutto usando la libreria highgui, molto limitata
char* window = "Camera";
cvNamedWindow(window, CV_WINDOW_AUTOSIZE);
//Qua entra in gioco la webcam, praticmante devi solo sceglierla 0 per la prima nel sistema
CvCapture* capture;
capture = cvCaptureFromCAM(0);
//l'immagine dove salvare il buffer della webcam
IplImage* image;
while (cvWaitKey(1) != 'e') {
image = cvQueryFrame(capture); // Kombination von cvGrabFrame und
cvShowImage(window, image);
};
std::cout << image->width << "," << image-> height << std::endl;
cvWaitKey(0);
cvDestroyWindow(window);
return 0;
}
Strarivari ha scritto:il tutto e trasparente rispetto al vero sistema che ce sotto (v4l su linux e directx su windows). Vantaggio e appunto l'indipendenza dal sistema operativo (si puo preservare anche usando qt o wxwidgets se la libreria highgui e troppo limitata per il prorpio scopo), svantaggio e che puoi fare poco se ci sono problemi.
comunque trovi molto a riguardo, ecco un piccolo esempio
#include <cv.h>
#include <highgui.h>
#include <iostream>
int main(int argc, char* argv[])
{
//la finestra su cui visulizzare il tutto usando la libreria highgui, molto limitata
char* window = "Camera";
cvNamedWindow(window, CV_WINDOW_AUTOSIZE);
//Qua entra in gioco la webcam, praticmante devi solo sceglierla 0 per la prima nel sistema
CvCapture* capture;
capture = cvCaptureFromCAM(0);
//l'immagine dove salvare il buffer della webcam
IplImage* image;
while (cvWaitKey(1) != 'e') {
image = cvQueryFrame(capture); // Kombination von cvGrabFrame und
cvShowImage(window, image);
};
std::cout << image->width << "," << image-> height << std::endl;
cvWaitKey(0);
cvDestroyWindow(window);
return 0;
}
WOW! Veramente notevole.
Stasera mi sono guardato tutti gli esempi che si trovano nella documentazione e devo dire che non potevate cosigliarmi delle librerie migliori.
Ora devo capire come integrarle in applicazioni QT, o meglio, come visualizzare l'output del tuo esempio in una dialog QT.
Se hai delle dritte da darmi mi sarebbero molto utili comunque domani ci perdo un po' di tempo e vediamo cosa viene fuori...
io a suo tempo dovevo scegliere tra wxwidgets e qt e visto che ai tempi il pacchetto di qt4 no c'era su slacky optai per wxwidgets (che ha anche una licenza piu favorevole per l'autore imho)
comunque credo che "l'idea" si possa usare anche con qt:
praticamente prendi il buffer dell'immagine in formato IplImage e crei un bitmap della tua toolkit e il gioco e fatto visto che poi per visualizzarlo pui procedere in maniera standard per il tuo toolkit. Questo e un esempio di wxwidgets per far vedere che il punto chiave e imageData
Non ho praticamente esperienza con qt e sono un paio d'anni che non lo uso quindi non posso essere piu concreto ma credo che cosi si possa risolvere senza problemi. Poi bisogna badare al fatto che il tutto usa i colori nello spazio bgr mentre probabilmente qt come wxwdgets usa rgb e la versione windows va "specchiata", comunque sono dettagli che si possono risolvere con le funzioni di opencv. Per quanto riguarda il framegrabbing e la visualizzazione si potrebbero usare threads, timer o un event che si ricrea a ogni chiamata
Strarivari ha scritto:io a suo tempo dovevo scegliere tra wxwidgets e qt e visto che ai tempi il pacchetto di qt4 no c'era su slacky optai per wxwidgets (che ha anche una licenza piu favorevole per l'autore imho)
comunque credo che "l'idea" si possa usare anche con qt:
praticamente prendi il buffer dell'immagine in formato IplImage e crei un bitmap della tua toolkit e il gioco e fatto visto che poi per visualizzarlo pui procedere in maniera standard per il tuo toolkit. Questo e un esempio di wxwidgets per far vedere che il punto chiave e imageData
Non ho praticamente esperienza con qt e sono un paio d'anni che non lo uso quindi non posso essere piu concreto ma credo che cosi si possa risolvere senza problemi. Poi bisogna badare al fatto che il tutto usa i colori nello spazio bgr mentre probabilmente qt come wxwdgets usa rgb e la versione windows va "specchiata", comunque sono dettagli che si possono risolvere con le funzioni di opencv. Per quanto riguarda il framegrabbing e la visualizzazione si potrebbero usare threads, timer o un event che si ricrea a ogni chiamata
Io al contrario ho sempre usato QT quindi non so come funzionano le wxwidgets ma il concetto è chiaro.