我的程序用1991张图片做人脸检测,发现结束时,程序占用了11.5G内存。明显存在内存泄漏。
然后, 逐一排查。发现从第53张图片开始,每次调用cv::subtract()函数,都会减少1.2G内存。
用另一种方式实现substract的减均值功能,程序结束时,内存只占用了209M。
代码贴到下面仅供参考。
int meanValue[3] = {103, 116, 123};
Mat subtractMat = cv_resized.clone();
int nChannelCount = cv_resized.channels();
for (int i = 0; i<cv_resized.rows; i++)
{
for (int j = 0; j<cv_resized.cols; j++)
{
for (int k = 0; k < nChannelCount; k++)
{
subtractMat.at<uchar>(i, j*nChannelCount + k) = image.at<uchar>(i, j*nChannelCount + k) - meanValue[k]; //取得像素
}
}
}
cv_resized.release();
.......
subtractMat.release();
参考:
https://blog.youkuaiyun.com/u014114990/article/details/50243115?utm_source=blogxgwz9