【发布时间】:2016-07-31 03:58:17
【问题描述】:
使用 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 ?
【问题讨论】:
-
当矩阵超出范围时,它将被释放(除非该矩阵的数据有不同的引用)
-
@Micka 如果这是一个计算时间很长的函数,会发生什么。发布会有帮助吗?
-
它会给你一些记忆,这可能会或可能不会帮助你
-
使用 RAII - 这是 c++ 最好的地方。