1

我正在实现一些方法,并且正在使用 OpenCv 函数。

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

疑问1:如何更好?

  • 选项 1

    IplImage* image1 = NULL;

    ...

    IplImage* 图片_sintetica(..){

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

    }

  • 选项 2

    IplImage* image1 = NULL;

    ...

    IplImage* 图片_sintetica(...){

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

    }

我认为在选项 2 中,image1 被创建了很多次(每次调用名为 picture_sintetica 的方法时),并且使用选项 1,它只会被创建一次,但我不确定......在其他例子中我'已经看到使用选项 2。

疑问2:是否等效声明图像等于零(IplImage * image1 = 0;),为NULL(IplImage * image1 = NULL;)o放置任何东西(IplImage * image1;)?

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

非常感谢!

4

1 回答 1

0

Doubt3开始,根据opencv 文档,当您需要图像的完整副本(包括标题、数据和 ROI)时,您应该使用 cvCloneImage。

疑问1:查看您的代码,没有理由认为 image1 应该创建多次,除非您的代码在 cicle 中。

Doubt2:我建议看看这个答案

于 2013-10-22T14:02:54.430 回答