学习opencv——乱释放内存的Bug,IplImage

来源:互联网 发布:yum wget 编辑:程序博客网 时间:2024/05/16 08:23

写第一个opencv程序时候,有个Bug,花了半个多小时都找不出来,最后到网上寻求帮组才知道问题所在。

使用cvQueryFrame()取出CvCapture*每帧图像,只需在最后释放CvCapture*,不需要释放IplImage*

#include <opencv2\opencv.hpp>

#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main()
{


char* windowTitle="test1";
const char* videoName="D:\\myFirstVideo1.avi";
CvCapture* capture=0;
IplImage* frame = 0;   


capture=cvCaptureFromCAM(0);


double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
 frame = cvQueryFrame( capture ); 
 cvWaitKey(100);
 CvVideoWriter* writer = 0;
  int isColol=1;   
  writer=cvCreateVideoWriter(videoName,-1,fps,cvSize(frame->width,frame->height),isColol);


cvNamedWindow(windowTitle,CV_WINDOW_AUTOSIZE);


for(int i=0;;i++)
{

frame =cvQueryFrame(capture);
cvWriteFrame(writer,frame);
cvShowImage(windowTitle,frame);
if(cvWaitKey(1) == 'q')  
break; 
std::cout<<i<<std::endl;
}


std::cout<<"writer"<<std::endl;
 cvReleaseVideoWriter(&writer);
 std::cout<<"wcapture"<<std::endl;
 cvReleaseCapture(&capture);


std::cout<<"windowTitle"<<std::endl;
cvDestroyWindow(windowTitle);

// 1. 从CvCapture里cvQueryFrame得到的
// 这样获得的图像无需释放,并且不能对这样获得的图像做任何数据操作,一般获得这样的图像后,先copy下来,再对copy版图像做操作。
        return 0;
}
0 0
原创粉丝点击