2013-10-22 77 views
1

我正在实现一些方法,我正在使用OpenCv函数。OpenCV:初始化图像

我使用视频的许多帧,我需要实现最佳代码以避免内存出现问题。我有一些疑问:

疑问1:它会更好吗?

  • 选项1

    的IplImage * image1的= NULL;

    ...

    的IplImage * picture_sintetica(..){

    ... 
    
    if (image1 == NULL){ 
    
        image1 = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); 
    } 
    
    ... 
    

    }

  • 选项2

    的IplImage * image1的= NULL;

    ...

    的IplImage * picture_sintetica(...){

    ... 
    
    image1 = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3); 
    
    ... 
    cvReleaseImage(&image1); 
    

    }

我认为,在方案2中,在此搜索创造了许多次(每次时间调用名为picture_sintetica的方法),并与选项1它只会创建一次,但我不知道...在其他例子中,我已经看到使用选项2.

疑问2:它等价于将图像等于零(IplImage * image1 = 0;),以NULL(IplImage * image1 = NULL;)放入任何东西(IplImage * image1;)?

疑问3:何时推荐使用名为cvCloneImage的函数,何时使用cvCopy更好?

非常感谢!

回答

0

开始Doubt3,与opencv documentation根据,当你需要的图像(包括头,数据和投资回报率)的完整副本,你应该使用cvCloneImage。

怀疑1:看着你的代码,没有理由认为image1应该创建很多次,除非你的代码在cicle中。

Doubt2:我建议去看一下this answer

+0

谢谢!每次解码视频帧时,都会调用名为picture_sintetica的方法。该框架将成为函数的参数,并且该方法将调用OpenCV函数,并创建不同的图像。因此,我认为每次帧被解码时,image1都将在选项2中创建,并且在第二帧解码并调用picture_sintetica时使用选项1,image1不为NULL并覆盖image1中的最后一个值。 – VirMarGu