【问题标题】:Will a Mat pointer be automatically released when being reassigned or as an ROI, source Mat is released?重新分配时是否会自动释放 Mat 指针或作为 ROI,源 Mat 被释放?
【发布时间】:2015-09-05 21:19:42
【问题描述】:

我试图清楚地了解 Mat (OpenCV) 在许多特定情况下的工作原理。我在这篇文章中询问的案例如下:

  1. 当一个 Mat 指针被重新分配到其他位置时,之前的标头和数据内存会自动释放吗?例如:

    Mat *m = XXX;
    m = YYY;
    
  2. 如果我调用sourceMat.release(),它是否也会释放头部m?

    Mat m = sourceMat(Rect);
    

【问题讨论】:

  • 快速回答:永远不要使用 Mat 指针!始终在堆栈上创建 Mats,内部引用计数将完成其余工作(因此您永远不需要使用释放)
  • 对于您的第一个问题,XXXYYY 是什么?如果它们是cv::Mat,则应该是Mat *m = &XXXm = &YYY
  • @herohuyongtao 是的,我就是这个意思。
  • @Miki :情况是 Mat 实例将在 main 函数中可用。每次将实例分配给另一个 Mat 构造函数,例如 MatInstance = sourceMat1(Rect1);然后MatInstance = sourceMat2(Rect2)...;,实例会不会只改变它的元素值和数据指针,而它的地址根本没有改变?
  • @0nand0n 我不明白你在问什么,抱歉。你能详细说明一下吗?

标签: c++ opencv memory-management mat


【解决方案1】:

对于第二个问题,答案是NO

OpenCV's docMat Mat::operator()(const Rect& roi) const 将创建一个新标头。所以释放sourceMat不会影响m

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多