【发布时间】:2015-09-05 21:19:42
【问题描述】:
我试图清楚地了解 Mat (OpenCV) 在许多特定情况下的工作原理。我在这篇文章中询问的案例如下:
-
当一个 Mat 指针被重新分配到其他位置时,之前的标头和数据内存会自动释放吗?例如:
Mat *m = XXX; m = YYY; -
如果我调用sourceMat.release(),它是否也会释放头部m?
Mat m = sourceMat(Rect);
【问题讨论】:
-
快速回答:永远不要使用 Mat 指针!始终在堆栈上创建 Mats,内部引用计数将完成其余工作(因此您永远不需要使用释放)
-
对于您的第一个问题,
XXX和YYY是什么?如果它们是cv::Mat,则应该是Mat *m = &XXX和m = &YYY。 -
@herohuyongtao 是的,我就是这个意思。
-
@Miki :情况是 Mat 实例将在 main 函数中可用。每次将实例分配给另一个 Mat 构造函数,例如 MatInstance = sourceMat1(Rect1);然后MatInstance = sourceMat2(Rect2)...;,实例会不会只改变它的元素值和数据指针,而它的地址根本没有改变?
-
@0nand0n 我不明白你在问什么,抱歉。你能详细说明一下吗?
标签: c++ opencv memory-management mat