在OpenCV中重新分配到Mat

时间:2013-07-09 16:10:51

标签: opencv

我有以下功能从OpenCV cv::Mat

中提取子图像
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 个答案:

答案 0 :(得分:1)

您可以使用cv::Mat subImg;执行此操作。 cv::Mat使用引用计数,子矩阵知道它属于更大的矩阵,因此内存将被正确释放。