【问题标题】:Does Mat::push_back(x) copy x elements?Mat::push_back(x) 是否复制 x 元素?
【发布时间】:2014-04-11 09:25:31
【问题描述】:

根据我的拙见,OpenCV 的 Mat 可以有效地处理内存管理;所以复制 Mats 并不意味着它们是“硬/物理”复制的;他们只是指原始垫子。

但是,对于已使用 push_back 推入更大 Mat 的垫子,是否可以安全地清除它们,假设它们是硬复制的,而不是使用与 x=y 中相同的复制技术?

在下面的代码中,bigx 释放了x 的内容后,还是后者的内容吗?

Mat x, bigx;
bigx.push_back(x);
x.release();

谢谢你:)

【问题讨论】:

    标签: c++ opencv vector mat


    【解决方案1】:

    据我所知,Mat::pushback() 将在每次推送时创建一个单独的源副本。所以你可以在推回后发布你的源代码。

    请看下面的例子,

       Mat src=imread("src.jpg",1);
       int rowSize=src.rows;
       Mat A;
       A.push_back(src.reshape(0,1));
       src.release();
    
       Mat B;
       B = A.row(0).clone();
       imshow("src",B.reshape(0,rowSize));
       waitKey(); 
    

    【讨论】:

      【解决方案2】:

      是的,push_back 调用复制构造函数来创建一个相同类型的新克隆元素,并自行决定保留原始(源)。

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 2016-09-18
        • 2013-09-01
        • 2023-03-04
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多