Bonjour,
Je pense être dans la section des forums la plus appropriée pour parler de ce problème :
J'ai écrit un programme Java utilisant OpenCV pour ouvrir une vidéo et en faire des captures (images).
Le programme fonctionne parfaitement avec une première vidéo AVI, mais pas avec une seconde vidéo AVI.
L'erreur a lieu dans VideoCapture.read(Mat) qui renvoie false au lieu de renvoyer true.
Auriez-vous une idée de ce qui pourrait entrainer ce problème ? Je ne pense pas qu'il vienne du code mais peut-être de l'encodage de la seconde vidéo...
Le code (au cas où) :
Pour la vidéo 1, j'ai en sortie :
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 public static void main(String[] args) throws IOException{ //opening video System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); String fileName = folder + "video2.avi"; VideoCapture cap = new VideoCapture(fileName); //testing video format int width = (int)cap.get(Highgui.CV_CAP_PROP_FRAME_WIDTH); System.out.println("width "+width); int height = (int)cap.get(Highgui.CV_CAP_PROP_FRAME_HEIGHT); System.out.println("height "+height); double frameRate = cap.get(5); System.out.println("frameRate "+frameRate); Mat img = new Mat(); boolean readen = cap.read(img); //est ce que la vidéo est lue ? System.out.println("readen "+readen); //capture pictures from video int i=0; Boolean fini = false; while(!fini){ if(cap.read(img)){ BufferedImage image; image = mat2Img(img); savePicture(image, folder+"capture\\"+i); i++; }else{ System.out.println("erreur donc fin"); fini = true; } }
width 656
height 520
frameRate 10.0
readen true
et le dossier "capture" se remplit bien avec les captures ;
Pour la vidéo 2, j'ai en sortie :
width 0
height 0
frameRate 0.0
readen false
erreur donc fin
sans aucune image sauvegardée dans le dossier "capture".
Partager