考虑以下代码:
Size size(227,227);
for(int i;i<=25000;i++)
{
Mat temp;
resize(imread(strcat(image_address,itoa(i))),temp,size);
data_.push_back(temp);
}
磁盘中图像数据集的大小(其地址传递给image_address)大约为250M。但是由此产生的程序需要4G的RAM。为什么? 如果我改为:
Size size(227,227);
Mat temp;
for(int i;i<=25000;i++)
{
resize(imread(strcat(image_address,itoa(i))),temp,size);
data_.push_back(temp);
}
我的问题已解决,但每个data_ element的引用计数最后变为25000。 refcount是mat的一部分还是Mat指向的部分数据?如果它存储在Mat中,每个元素的refcount如何增加到25000?为什么这个小改变解决了内存问题? 为了解决引用计数问题,我尝试了这段代码并再次返回内存问题:
Size size(227,227);
Mat temp;
for(int i;i<=25000;i++)
{
resize(imread(strcat(image_address,itoa(i))),temp,size);
data_.push_back(temp);
temp.release();
}
基于OpenCV Documentations release()在这种情况下必须只减少refcount。为什么它会导致内存问题再次出现?
(data_是类的成员并定义为std :: vector)