免费cv :: Mat没有释放内存

Oph*_*tan 3 c++ opencv

我将Mat数据(不是cv :: Mat对象)传递给函数,并使此函数成为此数据的新所有者.但是,我需要一个方法来释放原始对象,而不释放它指向的数据缓冲区.

我知道这将发生在从外部数据创建的cv :: Mat中,我只需要将此功能用于通用cv :: Mat.

有没有办法做到这一点?

And*_*aev 9

你可以使用addref()方法,但你会有内存泄漏.

实际上从Mat分离数据不是一个好主意:

  • 它不是为此设计的;
  • 你不能保证从通用cv :: Mat获得的指针指向分配的内存块的开头;
  • 很可能你将无法自己释放内存,因为cv :: Mat可能会使用自己的内存分配例程(有很多理由这样做,例如对齐).
  • 即使您找到了解决数据指针所有问题的方法,您仍然无法避免Mat引用计数器的内存泄漏.

因此,只有两种方式可以保证Mat支持:

  • 在Mat创建上提供指针;
  • 将数据复制到缓冲区.

即使它在当前版本中工作,在未来的版本中也可以打破任何其他方式.