使用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 ?
答案 0 :(得分:3)
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()可以节省编译器在每个循环中创建指针的开销