如何将Mat(CV_32FC1)复制到vector <float> *

时间:2015-08-19 17:02:46

标签: c++ opencv pointers

我想将mat数据复制到vector。

所以,现在我必须将mat数据复制到&#34; vector * Vf2&#34;

我写了这段代码。

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

如何将垫片复制到vector<float>* 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 *

2 个答案:

答案 0 :(得分:0)

您将指针定义为vector<float>。然后你先访问它而不先分配它。您需要初始化指针: vector<float> *Vf2 = new vector<float>;并访问它指向的对象。

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

答案 1 :(得分:0)

您不应该使用指向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;
}