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 : Sélectionner tout - Visualiser dans une fenêtre à part
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; }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
Partager