2013-07-09 19 views
0

太我有以下功能,其從OpenCV的cv::Mat重新分配到在OpenCV中

void Process(int a,int b,int c,int d) 
{ 
    // Extract img(a:b,c:d) each time   
    subImg = img(cv::Range(a, b), cv::Range(c,d)); 
} 

提取的子圖像我請Process()在一個循環。在每次調用時,a,b,c,d的值不斷變化。如果subImg已被宣佈爲cv::Mat subImg;,我可以做以上嗎?即可以OpenCV的動態調整subImg還是我去一個基於指針的方法,即本人聲明:

cv::Mat* subImg; // Initialized to NULL in constructor 

和修改功能如下:

void Process(int a,int b,int c,int d) 
{ 
    // Extract img(a:b,c:d) each time   
    if(subImg) delete subImg;   
    subImg = img(cv::Range(a, b), cv::Range(c,d)).clone(); 
} 

回答

1

你可以用cv::Mat subImg;做到這一點。 cv::Mat使用引用計數,並且子矩陣知道它屬於更大的矩陣,所以內存將被正確地解除分配。