将vector<Mat>转换为矢量文件Opencv

Posted

技术标签:

【中文标题】将vector<Mat>转换为矢量文件Opencv【英文标题】:Convert vector<Mat> to vector file Opencv 【发布时间】:2014-11-21 08:29:53 【问题描述】:

如何将 Mat 文件的矢量转换为 Mat 文件?我有一个大小为 N 的向量。每个 mat 文件的大小为 1xM。我想创建一个大小为 1xNM 的新 Mat 文件?我怎样才能在 Opencv 中这样做?或者更好地创建一个大小为 MN 的新向量,它将包含每个 Mat 文件的像素。 Opencv中是否有重塑功能?

   Mat flat;       // output

    for (size_t i=0; i<patch_image.size(); i++)
    
        // you said, those would be 1xM, but let's make sure.
        flat.push_back( patch_image[i].reshape(1,1) ); 
    

    flat = flat.reshape(1,1);

    int temp;   
    for(int i=0; i<flat.rows; i++)
        for(int j=0; j<flat.cols; j++)

            temp = (int)flat.at<uchar>(i,j);
            cout << temp << "\t";
               
        cout << endl;
    

但是,分配给 int temp 似乎有效。

【问题讨论】:

"赋值给 int temp 它似乎有效" cout << flat << endl;(一次打印整个 Mat) 【参考方案1】:

是的,有一个reshape 函数。

vector<Mat> vm; // input
Mat flat;       // output

for (size_t i=0; i<vm.size(); i++)

    // you said, those would be 1xM, but let's make sure.
    flat.push_back( vm[i].reshape(1,1) ); 


flat = flat.reshape(1,1); // all in one row, 1xN*M now

注意,重塑 返回 一个新的 Mat 标题,它不起作用就地(这里的常见陷阱!​​)

【讨论】:

感谢 opencv 的 GURU!

以上是关于将vector<Mat>转换为矢量文件Opencv的主要内容,如果未能解决你的问题,请参考以下文章

如何将单个图像从图像矢量复制到临时 cv::Mat?

将 Mat 转换为 <vector<vector>> C++

将 vector<Tensor> 输出转换为 vector<Mat> 输出

将 cv::Mat 转换为 vector<int>

OpenCV2.4.2将vector<Point2f>转换为Mat,释放mat会报错

c ++如何将视频序列放入OpenCV中的vector<Mat>?