0

我有以下函数从 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();
}
4

1 回答 1

1

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

于 2013-07-09T16:26:39.167 回答