2013-07-09 17 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使用引用计数,并且子矩阵知道它属于更大的矩阵,所以内存将被正确地解除分配。