2013-10-22 115 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