我有一个for循环,我在其中创建了一个本地 cv::Mat 对象来存储图像。代码如下所示:
for (int iter = 0; iter < totalNumberOfIterations; iter++)
{
cv::Mat I = cv::imread(argv[1], 0);
std::cout << "Reference count I: " << *I.refcount << std::endl;
I.release();
}
在循环的第一次迭代中,我发现为变量“I”分配了内存,并且在我调用I.release()时将其释放。在随后的迭代中,内存不会被释放,我的程序的 RAM 消耗保持不变。似乎 OpenCV 为变量“I”保留内存以用于优化目的。这是真的?
变量 "I" (*I.refcount) 的引用计数在for循环的所有迭代中保持为 1。
我正在使用 OpenCV 2.4.4,我正在使用 gcc 4.6.4 编译我的代码。为了检查内存消耗,我在我的 Ubuntu 13.04 机器上使用了命令“top”。
编辑:当我不强制 OpenCV 读取灰度图像时,我注意到正在为变量“I”释放内存。(注意第二个参数在 imread 命令中设置为“1”)。
cv::Mat I = cv::imread(argv[1], 1);