我正在实现一些方法,并且正在使用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中,多次创建了image1(每次调用名为picture_sintetica的方法),并且使用选项1,它将仅创建一次,但是我不确定...在其他示例中,我会我们已经看到使用选项2。

    怀疑2:是否等效于将图像等于零(IplImage * image1 = 0;)声明为NULL(IplImage * image1 = NULL;)o放置任何内容(IplImage * image1;)?

    疑问3::什么时候建议使用名为cvCloneImage的函数,什么时候最好使用cvCopy?

    非常感谢!

    最佳答案

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

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

    怀疑2:,我建议看看this answer

    关于opencv - OpenCV:初始化图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19519531/

    10-10 16:13