wafafolla
Messages postés10Date d'inscriptionmercredi 14 juillet 2010StatutMembreDernière intervention21 mai 2012
-
21 mai 2012 à 15:35
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 2012
-
22 mai 2012 à 01:53
salut ,
je veux enregistrer une séquence vidéo à partir d'une caméra ip. pour ce fait, j'ai utilisé opencv, le problème c'est que je n'arrive pas à stopper l'enregistrement dans une durée bien déterminée. (par exemple je veux enregistrer une séquence de 1 mn pas plus).
j'ai essayé d'utiliser un timer mais l'enregistrement ne s’arrête pas
avez vous une idée concernant ce sujet ??
voici le code: une methode enregistrer() et une methode timer() qui décrémente un entier m=60 chaque seconde.
Enregistrement::Enregistrement(QWidget *parent) :
QWidget(parent),
ui(new Ui::Enregistrement)
{
ui->setupUi(this);
m = 60;
timer = new QTimer();
connect(timer,SIGNAL(timeout()), this,SLOT(timer()));
}
void Enregistrement::opencvEnregistrer()
{
CvCapture *capt;
CvVideoWriter *videoWriter;
IplImage* image;
timer->start(1000);
capt = cvCaptureFromFile("http://192.168.1.71/axis-cgi/mjpg/video.cgi?.mjpg");
cvGrabFrame(capt);
image = cvRetrieveFrame(capt);
videoWriter=cvCreateVideoWriter("enregist.avi",CV_FOURCC('D','I','V','X'),20,cvSize(image->width,image->height),1);
exit_key_press=0;
while(exit_key_press!='q')
{
cvGrabFrame(capt);
image = cvRetrieveFrame(capt);
if (image)
cvWriteFrame(videoWriter,image);
//exit_key_press = cvWaitKey(1);
}
cvReleaseCapture(&capt);
cvReleaseVideoWriter(&videoWriter);
}
void Enregistrement:: timer()
{
m = m-1;
if(m==0) // apres une minute l'entier m=0 alors exit_key_press ='q' pour que l'enregistrement s'arrête
exit_key_press='q';
}
bon moi je travail avec Qt mais quelque soit l'idée (en c ou c++), peut m'aider.
merci d'avance
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 22 mai 2012 à 01:53
Salut,
Au moment de créer le CvVideoWriter, regarder le timestamp du système (c'est le nombre de secondes écoulées depuis le 1er janvier 1970). De là tu sais que la vidéo devra stopper si (timestamp actuel > timestamp de départ + 60s).
Le code est différent selon la plateforme.
Sous windows GetLocalTime() fonctionne, je m'en sers pour capturer une image par minute pour faire une vidéo accélérée: GetLocalTime() te permet de calculer la date de fin de capture à la seconde près avec st.wMinute + 1.
Autre solution mais je sais pas si ça marche sous Qt: dans la boucle ajouter cvWaitKey(1000), ce qui fera que la boucle tourne à 1Hz. Un simple
if (c++ > 60) break; suffirait alors pour stopper la capture. Avec cvWaitKey(10).