簡體   English   中英

如何將Mat(CV_32FC1)復制到矢量 <float> *

[英]How to copy Mat(CV_32FC1) to vector<float>*

我想將mat數據復制到vector。

因此,現在我必須將數據復制到“ 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);  

但是,分配方法時沒有錯誤。

而且如果vector不是指針。

所以這下面的代碼成功了。


 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<float>* Vf2

告訴我

抱歉,我想做的是將墊數據復制到共享內存。 我寫了這樣的代碼。

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();

為什么,我想將墊子數據復制到矢量*

您定義了一個指向 vector<float>指針 然后,您無需先分配即可訪問它。 您需要初始化指針: vector<float> *Vf2 = new vector<float>; 並訪問它指向的對象。

完成后不要忘記釋放它( delete Vf2; )! 或考慮使用智能指針

你不應該使用指向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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM