Problème avec cvSetCaptureProperty : va à la key frame
Bonjour,
j'utilise OpenCV pour lire des vidéos, mais cvSetCaptureProperty( capture , CV_CAP_PROP_POS_FRAMES , frameNumber ) ne va pas à la frame que je lui demande mais à une après, située entre 0 et 12 frames plus loin. ex: quand je lui demande une frame entre 1 et 12, il donne la 12, entre 13 et 24, la 24, etc.
Je me demande si les frames qu'il donne ne sont pas les key frames de la vidéo. :(
Est ce quelqu'un sait si ce problème est soluble? Cela est embettant car je voudrais pouvoir faire des sauts dans le temps (ex: avancer/reculer d'une minute) et lire en arrière.
Merci de vos réponses!!!
ci dessous un code minimal qui met en évidence mon problème son output.
Code:
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include "stdafx.h"
#include <stdio.h>
#include <highgui.h>
#include <cv.h>
int _tmain(int argc, _TCHAR* argv[]){
// Touche clavier
char key = 'a';
// Image
IplImage *image;
// Capture vidéo
CvCapture *capture;
int frameNumber = 0;
capture = cvCreateFileCapture("h2.avi");
// Vérifier si l'ouverture du flux est ok
if (!capture) {
printf("Ouverture du flux vidéo impossible !\n");
return 1;
}
// Définition de la fenêtre
cvNamedWindow("OpenCV Window", CV_WINDOW_AUTOSIZE);
// Boucle tant que l'utilisateur n'appuie pas sur la touche q (ou Q)
while(key != 'q' && key != 'Q') {
// On récupère une image
cvSetCaptureProperty( capture , CV_CAP_PROP_POS_FRAMES , frameNumber );
image = cvQueryFrame(capture);
frameNumber += 1;
std::cout << "asked frame: " << frameNumber << "\t" << "video frame: " << cvGetCaptureProperty( capture , CV_CAP_PROP_POS_FRAMES ) << std::endl;
// On affiche l'image dans une fenêtre
cvShowImage( "OpenCV Window", image);
key = cvWaitKey(500);
}
cvReleaseCapture(&capture);
cvDestroyWindow("OpenCV Window");
return 0;
} |
Citation:
asked frame: 0 video frame: 0
asked frame: 1 video frame: 12
asked frame: 2 video frame: 12
asked frame: 3 video frame: 12
asked frame: 4 video frame: 12
asked frame: 5 video frame: 12
asked frame: 6 video frame: 12
asked frame: 7 video frame: 12
asked frame: 8 video frame: 12
asked frame: 9 video frame: 12
asked frame: 10 video frame: 12
asked frame: 11 video frame: 12
asked frame: 12 video frame: 12
asked frame: 13 video frame: 24
asked frame: 14 video frame: 24
asked frame: 15 video frame: 24
asked frame: 16 video frame: 24
asked frame: 17 video frame: 24
asked frame: 18 video frame: 24
asked frame: 19 video frame: 24