openCV cv::mat release

openCV cv::mat release

本文关键字:release mat openCV cv      更新时间:2023-10-16

使用openCV时,cv::Mat。http://docs.opencv.org/modules/core/doc/basic_structures.html我知道有人在使用某种智能指针。我的问题是,为了做一些内存优化。
我应该调用cv::Mat release()以释放未使用的矩阵吗?
或者我应该相信编译器来做?

为例,想想下面的代码:

cv::Mat filterContours = cv::Mat::zeros(bwImg.size(),CV_8UC3);  
bwImg.release();
for (int i = 0; i < goodContours.size(); i++)
{
    cv::RNG rng(12345);
    cv::Scalar color = cv::Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
    cv::drawContours(filterContours,goodContours,i,color,CV_FILLED);        
}
/*% Fill any holes in the objects
bwImgLabeled = imfill(bwImgLabeled,'holes');*/

imageData = filterContours;
filterContours.release(); //should I call this line or not ?

cv::release()函数释放内存,析构函数将在Mat实例的作用域结束时处理这些内存。因此,您不需要在发布的代码片段中显式调用它。需要它的一个例子是,如果矩阵的大小在同一循环中的不同迭代中可以变化,即

using namespace cv;
int i = 0;
Mat myMat;
while(i++ < relevantCounter )
{
    myMat.create(sizeForThisIteration, CV_8UC1);
    //Do some stuff where the size of Mat can vary in different iterations\
    mymat.release();
}

在这里,使用cv::release()为编译器节省了在每个循环中创建指针的开销