gpt4 book ai didi

c++ - 将 Mat 转换为 vector 并将 Vector 转换为 opencv 中的 mat

转载 作者:太空狗 更新时间:2023-10-29 20:04:16 28 4
gpt4 key购买 nike

我想在 opencv 中将 Mat 转换为 vector ,将 Vector 转换为 mat。

我的代码:

     void mat_to_vector(Mat in,vector<float> &out){

for (int i=0; i < in.rows; i++) {
for (int j =0; j < in.cols; j++){
//unsigned char temp;

//file << Dst.at<float>(i,j) << endl;
out.push_back(in.at<float>(i,j));
}
}

}
void vector_to_mat(vector<float> in, Mat out,int cols , int rows){
for (int i=rows-1; i >=0; i--) {
for (int j =cols -1; j >=0; j--){

out.at<float>(i,j) = in.back();
in.pop_back();
//file << Dst.at<float>(i,j) << endl;
// dst_temp.push_back(Dst.at<float>(i,j));
}
}
}

上面的代码很慢。有更快的解决方案吗?

最佳答案

我认为我的代码对你有用:

// Generate some test data
int r=3;
int c=3;
Mat M(r,c,CV_32FC1);
for(int i=0;i<r*c;++i)
{
M.at<float>(i)=i;
}
// print out matrix
cout << M << endl;

// Create vector from matrix data (data with data copying)
vector<float> V;
V.assign((float*)M.datastart, (float*)M.dataend);

// print out vector
cout << "Vector" << endl;
for(int i=0;i<r*c;++i)
{
cout << V[i] << endl;
}

// Create matrix from vector

// Without copying data (only pointer assigned)
//Mat M2=Mat(r,c,CV_32FC1,(float*)V.data());

// With copying data
Mat M2=Mat(r,c,CV_32FC1);
memcpy(M2.data,V.data(),V.size()*sizeof(float));


// Print out matrix created from vector
cout << "Second matrix" << endl;
cout << M2 <<endl;
// wait for a key
getchar();

关于c++ - 将 Mat 转换为 vector <float> 并将 Vector<float> 转换为 opencv 中的 mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20980723/

28 4 0
文章推荐: c++ - vector