【问题标题】:OpenCV: Initialize the imagesOpenCV:初始化图像
【发布时间】:2013-10-22 22:02:54
【问题描述】:

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

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

疑问一:如何更好?

  • 选项 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 中,image1 被创建了很多次(每次调用名为 picture_sintetica 的方法时)并且使用选项 1 它只会创建一次,但我不确定......以及其他我看到的使用选项 2 的示例。

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

疑问3:什么时候推荐使用cvCloneImage这个函数,什么时候使用cvCopy比较好?

非常感谢!

【问题讨论】:

    标签: opencv image-processing


    【解决方案1】:

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

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

    疑问2:建议去this answer看看

    【讨论】:

    • 谢谢!每次对视频的一帧进行解码时,都会调用名为 picture_sintetica 的方法。框架将是函数的参数,并且在此方法中它将调用 OpenCV 函数并创建不同的图像。因此,我认为每次解码一帧时,将在选项 2 中创建 image1,并且在解码第二帧并调用 picture_sintetica 时使用选项 1,image1 不是 NULL 并覆盖 image1 中的最后一个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2020-09-24
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多