Opencv; Comment gratuit IplImage*?

Je suis en train d'essayer d'obtenir un blocage de OpenCV. Pour le moment, je suis en train de la soustraction de deux images les uns des autres et d'afficher le résultat. J'ai trouvé un exemple de code qui fera l'amende juste.
Mon problème est que j'obtiens une erreur d'allocation de mémoire.
Eh bien, rien de spécial à ce sujet, parce que je suis l'alimentation le programme avec la vidéo HD.
Donc ma question est comment puis-je libérer la mémoire allouée à un IplImage*?
Le Tapis de type a quelque chose comme Tapis.release().
IplImage n'en a pas, ni ne gratuit(IplImage) de travail.

Voici mon code:

#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\highgui\highgui_c.h>
using namespace cv;
int main()
{
std::string videofilename;
std::cout << "Please specify the video name (make sure it is in the same folder\nas the application!):" << std::endl;
std::cin >> videofilename;
std::cout << "The name you provided: " << videofilename << std::endl;
VideoCapture video(videofilename);
if(!video.isOpened())
{
std::cout << "Could not open video file" << std::endl;
return -1;
}
std::cout << "Number of frames: " << video.get(CV_CAP_PROP_FRAME_COUNT) << std::endl;
std::cout << "Duration: "<< static_cast<int>(video.get(CV_CAP_PROP_FRAME_COUNT))/(30*60) << "min " << static_cast<int>((video.get(CV_CAP_PROP_FRAME_COUNT)))%(30*60)/30 << "sek" << std::endl;
//Close it before opening for playing
video.release();
CvCapture* capture = cvCaptureFromAVI(videofilename.c_str()); 
IplImage* frame = cvQueryFrame(capture);
IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
if ( !capture ) 
{  
std::cout << "Could not open video file" << std::endl;
return -1; 
}
cvNamedWindow("dest", CV_WINDOW_AUTOSIZE);
while(1)
{
frame = cvQueryFrame(capture);
if(!frame)
{
printf("Capture Finished\n");
break;
}
currframe = cvCloneImage(frame);    //copy frame to current
frame = cvQueryFrame(capture);        //grab frame
if(!frame)
{
printf("Capture Finished\n");
break;
}
cvSub(frame, currframe, destframe);    //subtraction between the last frame to cur
cvShowImage("dest", destframe);
//cvReleaseImage(currframe); //doesn't work
//free(currframe); //doesnt work either
//delete(currframe); //again, no luck
cvWaitKey(30);
}
cvDestroyWindow("dest");
cvReleaseCapture(&capture);
return 0;
}
  • s'il vous plaît éviter IplImages, cv* fonctions, l'ensemble obsolètes c-api. vous avez déjà ouvert un VideoCapture avec succès, maintenant, allez l'utiliser.
InformationsquelleAutor user2175762 | 2013-12-22