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



我想复制一个mat数据到向量。

那么,现在我要复制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);  

但是,在赋值方法时没有出现错误。

如果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

谁来告诉我

对不起,精算师,我想做的是将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<float>指针。然后你在没有分配的情况下访问它。你需要初始化指针:vector<float> *Vf2 = new vector<float>;和访问它所指向的对象

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

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

可以将/转换为vectorMat:

#include <opencv2opencv.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;
}

相关内容

最新更新