OpenCV中的内存管理系统实际上如何工作?

时间:2017-10-12 15:33:37

标签: c++ image-processing opencv3.0

考虑以下代码:

    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)

0 个答案:

没有答案