Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Mat opencv中保存向量_C++_Opencv - Fatal编程技术网

C++ 在Mat opencv中保存向量

C++ 在Mat opencv中保存向量,c++,opencv,C++,Opencv,我试图在一个矩阵中保存4个矩阵。但我不确定我们是否可以这样做。所以我将我的4矩阵转换为4个向量。现在我想在矩阵中插入4个向量。我的代码是: Mat hist_TL = Mat::zeros(20,1, CV_32F); Mat hist_TR = Mat::zeros(20,1, CV_32F); Mat hist_BL = Mat::zeros(20,1, CV_32F); Mat hist_BR = Mat::zeros(20,1, C

我试图在一个矩阵中保存4个矩阵。但我不确定我们是否可以这样做。所以我将我的4矩阵转换为4个向量。现在我想在矩阵中插入4个向量。我的代码是:

       Mat hist_TL = Mat::zeros(20,1, CV_32F);
       Mat hist_TR = Mat::zeros(20,1, CV_32F);
       Mat hist_BL = Mat::zeros(20,1, CV_32F);
       Mat hist_BR = Mat::zeros(20,1, CV_32F);
        for(int i=1;i<=21;i++)
        {
            for(int k=0;k<TL_k_stats.rows;k++)
            {
            if((angl_TL<=bins[i]) && (angl_TL>bins[i-1]))
            {
               hist_TL.at<float>(i-1,0)+=TL_k_stats.at<float>(k,4);
            }
            if((angl_TR<=bins[i]) && (angl_TR>bins[i-1]))
               {
                hist_TR.at<float>(i-1,0)+=TR_k_stats.at<float>(k,4);
               }

            if((angl_BL<=bins[i]) && (angl_BL>bins[i-1]))
               {
                hist_BL.at<float>(i-1,0)+=BL_k_stats.at<float>(k,4);
               }

            if((angl_BR<=bins[i]) && (angl_BR>bins[i-1]))
               {
                hist_BR.at<float>(i-1,0)+=BR_k_stats.at<float>(k,4);
               }
            }
        hist_TL=hist_TL.inv();
        hist_TR=hist_TR.inv();
        hist_BL=hist_BL.inv();
        hist_BR=hist_BR.inv();
        std::vector<float> vhist_TL;
        std::vector<float> vhist_TR;
        std::vector<float> vhist_BL;
        std::vector<float> vhist_BR;

        hist_TL.copyTo(vhist_TL);
        hist_TR.copyTo(vhist_TR);
        hist_BL.copyTo(vhist_BL);
        hist_BR.copyTo(vhist_BR);

那么我如何在opencv中实现这一点呢?

您可以使用允许您单独为列赋值的“col”方法:

   Mat hist_TL = Mat::zeros(20,1, CV_32F)+1;
   Mat hist_TR = Mat::zeros(20,1, CV_32F)+2;
   Mat hist_BL = Mat::zeros(20,1, CV_32F)+3;
   Mat hist_BR = Mat::zeros(20,1, CV_32F)+4;

   Mat result = Mat::zeros(20,4,CV_32F);

   hist_TL.col(0).copyTo(result.col(0));
   hist_TR.col(0).copyTo(result.col(1));
   hist_BL.col(0).copyTo(result.col(2));
   hist_BR.col(0).copyTo(result.col(3));
更新:

如果不希望替换整列,而只替换其中的一部分,可以使用“范围”方法:

   Mat result = Mat::zeros(20*4,1,CV_32F);

   hist_TL.copyTo(result.rowRange(Range(20*0,20*1)));
   hist_TR.copyTo(result.rowRange(Range(20*1,20*2)));
   hist_BL.copyTo(result.rowRange(Range(20*2,20*3)));
   hist_BR.copyTo(result.rowRange(Range(20*3,20*4)));

您可以直接将4矩阵复制到更大的矩阵中,如下所示:

    Mat TL(rows, cols, type);
    Mat TR(rows, cols, type);
    Mat BL(rows, cols, type);
    Mat BR(rows, cols, type);
    Mat dst(rows * 2, cols *2, type);
    TL.copyTo(dst(Rect(0, 0, cols, rows)));
    TR.copyTo(dst(Rect(cols, 0, cols, rows)));
    BL.copyTo(dst(Rect(0, rows, cols, rows)));
    BR.copyTo(dst(Rect(cols, rows, cols, rows)));
文件:


但我必须在保存前转置Mat hist_TL和其他文件。这样它将有一行多列
    Mat TL(rows, cols, type);
    Mat TR(rows, cols, type);
    Mat BL(rows, cols, type);
    Mat BR(rows, cols, type);
    Mat dst(rows * 2, cols *2, type);
    TL.copyTo(dst(Rect(0, 0, cols, rows)));
    TR.copyTo(dst(Rect(cols, 0, cols, rows)));
    BL.copyTo(dst(Rect(0, rows, cols, rows)));
    BR.copyTo(dst(Rect(cols, rows, cols, rows)));