【问题标题】:How to copy Mat(CV_32FC1) to vector<float>*如何将 Mat(CV_32FC1) 复制到 vector<float>*
【发布时间】:2015-08-20 01:59:04
【问题描述】:

我想将一个 mat 数据复制到 vector 。

所以,现在我必须将 mat 数据复制到“vector* Vf2”

我写了这段代码。


cv::Mat M=Mat(480,480,CV_32FC1,「the data ....」);   

//copy vector to mat   

vector< float> *Vf2;   

//copy mat to vector   

Vf2->assign((float*)M.datastart, (float*)M.dataend);  

但是,它在分配方法时没有出错。

如果向量不是指针。

所以下面的代码成功了。


 cv::Mat M=Mat(480,480,CV_32FC1,「the data ....」);   

 //copy vector to mat   

 vector< float> Vf2;   

 //copy mat to vector   

 Vf2.assign((float*)M.datastart, (float*)M.dataend);   

如何将mat复制到vector&lt;float&gt;* Vf2

告诉我一个人

抱歉精算师我想做的是将mat数据复制到共享内存。 我写了这样的代码。

managed_shared_memory shmd(create_only, DEPTHNAME, WIDTH_PIC * HEIGHT_PIC * 4 + 1024);

std::vector<float> *ptrd=shmd.construct< std::vector<float> >("DepthImage")(); mxd->lock(); 

ptrd->assign((float*)decodedDepthData2.datastart,(float*)decodedDepthData2.dataend);

mxd->unlock();

为什么,我想将mat数据复制到vector*

【问题讨论】:

    标签: c++ opencv pointers


    【解决方案1】:

    您定义了一个指向vector&lt;float&gt;指针。然后你在没有先分配它的情况下访问它。您需要初始化指针: vector&lt;float&gt; *Vf2 = new vector&lt;float&gt;; 和访问它指向的对象。

    完成后别忘了释放它 (delete Vf2;)!或者考虑使用智能指针

    【讨论】:

    • 或者不要分配标准容器以new开头。
    • 所以,我必须将垫子复制到共享内存。如何复制到“std::vector *ptrd=shmd.construct >("DepthImage")();"
    【解决方案2】:

    您不应该使用指向vector 的指针。

    您可以在vectorMat 之间进行转换:

    #include <opencv2\opencv.hpp>
    #include <vector>
    using namespace std;
    using namespace cv;
    
    int main()
    {
        vector<float> v1{1, 2, 3, 4, 5};
    
        // vector to Mat
    
        Mat1f m1(v1);       // not copying data, just creating the matrix header
        Mat1f m2(v1, true); // copying data
    
        // Mat to vector
    
        vector<float> v2(m2.begin(), m2.end()); // copying data
    
    
        // If you really need a pointer to a vector, then
    
        vector<float>* v3 = new vector<float>(m2.begin(), m2.end());
        // ... do your stuff
        delete v3;
    
        return 0;
    }
    

    【讨论】:

    • managed_shared_memory shmd(create_only, DEPTHNAME, WIDTH_PIC * HEIGHT_PIC * 4 + 1024); interprocess_mutex* mxd = shmd.construct("TheMutex")(); std::vector *ptrd=shmd.construct >("DepthImage")();
    • 谢谢三木。为什么我必须使用指针,因为我想将 Mat Data 复制到共享内存。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2021-01-26
    相关资源
    最近更新 更多