Bonjour,

Je travaille actuellement sur un projet d'acquisition vidéo où je dois sauvegarder au format image les frames d'une caméra. Jusqu'à maintenant je les enregistrais au format .bmp mais je voudrais les enregistrer au format .png afin de gagner de la place sur le disque.

Cependant lorsque je change mon format d'image mon application plante ("xxx.exe a rencontré un problème et doit fermer"). J'ai alors écrit un simple programme qui récupère une image de la caméra pour la sauvegarder (afin de voir si vraiment c'était le format le problème), et en effet ce programme ne marche pas alors qu'il marche très bien en sauvegarde .bmp.

Voilà le simple programme qui ne marche pas :

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
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
 
using namespace std;
using namespace cv;
 
int main()
{
    VideoCapture cap(0);
    if(!cap.isOpened())
        return -1;
 
    Mat frame;
    cap >> frame;
    // Mat frameC;
    // frame.convertTo(frameC,CV_16UC3);
    imwrite("C:\\Frames\\frame.png",frame);
 
    return 0;
}
Cela ne marche pas en .jpg non plus. Par contre aucun problème avec les formats .bmp et .dib. Savez vous d'où cela peut venir ? A noter que je travaille sous Windows XP avec Visual Studio 2005 et OpenCV 2.1. J'ai essayé de convertir mon image avant de la sauvegarder (en commentaire dans le code) mais cela ne change rien.

A noter que si j'ouvre et réenregistre une image .png, cela marche parfaitement, le problème provient seulement des images de la caméra.

J'ai alors démarré un débogage de mon programme qui m'indique donc une erreur dans malloc.c ligne 163 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
res = _heap_alloc(size);
L'erreur est la suivante :

"Exception non gérée à 0x70100fcd dans TestOpenCV.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000"

Je ne sais pas ce que représente size dans cette fonction mais il est de type size_t et vaut 32 lors de l'appel à la fonction _heap_alloc. Cette erreur correspond d'habitude à un problème d'allocation mémoire, mais là je ne vois pas.

Mon programme s'arrête finalement avec le code -1073741819 (0xc0000005).

Je ne trouve vraiment pas de solution alors si vous avez une idée votre aide est la bienvenue.

Merci d'avance

Lucas