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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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++ 如何在c+中组合5个矩阵+/opencv_C++_Opencv - Fatal编程技术网

C++ 如何在c+中组合5个矩阵+/opencv

C++ 如何在c+中组合5个矩阵+/opencv,c++,opencv,C++,Opencv,我有5个mxn矩阵。。首先,我使用以下代码将它们转换为1行矩阵: //now converting to 1 row matrix CvMat row_header, *row; row = cvReshape(mat, &row_header, 0, 1) CvMat *M1; //cv::Mat M1(2,row->width,CV_32FC1); M1 = cvCreateMat(5,row->width,CV_32FC1 ); //row.c

我有5个mxn矩阵。。首先,我使用以下代码将它们转换为1行矩阵:

//now converting to 1 row matrix
CvMat row_header, *row;
row = cvReshape(mat, &row_header, 0, 1)
CvMat *M1;
    //cv::Mat M1(2,row->width,CV_32FC1);
    M1 = cvCreateMat(5,row->width,CV_32FC1 );
    //row.copyTo(M1.row(0));
    //row2.copyTo(M1.row(2));
    //M1.row(0) = 0;
    //M1.row(0) = row + 0;
    //M1.row(1) = 0;
    //M1.row(1) = row2 + 0;
    cvSetZero(M1);

    /*for(int i=0;i<5;i++)
    {
        for(int j=0;j<row->width;j++)
        {
            CV_MAT_ELEM( *M1, float, i, j ) = CV_MAT_ELEM( *rowi, float, 0, i );*/

    for(int i=0;i<row->width;i++)
    {
        CV_MAT_ELEM( *M1, float, 0, i ) = CV_MAT_ELEM( *row, float, 0, i );
    }

    for(int j=0;j<row2->width;j++)
    {
        CV_MAT_ELEM( *M1, float, 1, j ) = CV_MAT_ELEM( *row2, float, 0, j );
    }
    for(int k=0;k<row2->width;k++)
    {
        CV_MAT_ELEM( *M1, float, 2, k ) = CV_MAT_ELEM( *row3, float, 0, k );
    }
    for(int l=0;l<row2->width;l++)
    {
        CV_MAT_ELEM( *M1, float, 3, l ) = CV_MAT_ELEM( *row3, float, 0, l );
    }
    for(int m=0;m<row2->width;m++)
    {
        CV_MAT_ELEM( *M1, float, 4, m ) = CV_MAT_ELEM( *row4, float, 0, m );
    }
这是正确的吗


那么假设我有5个这样的矩阵(1行和50列),我如何将它们组合成一个大矩阵(5行和50列)?

< P>首先,<强>学习OpenCV>/P>的C++ API。 然后像这样做:

cv::Mat dest(number_of_rows, number_of_columns);
row1.copyTo(dest.row(1));
row2.copyTo(dest.row(2));
...
来源:

OP提供的解决方案

我用以下代码修复了它:

//now converting to 1 row matrix
CvMat row_header, *row;
row = cvReshape(mat, &row_header, 0, 1)
CvMat *M1;
    //cv::Mat M1(2,row->width,CV_32FC1);
    M1 = cvCreateMat(5,row->width,CV_32FC1 );
    //row.copyTo(M1.row(0));
    //row2.copyTo(M1.row(2));
    //M1.row(0) = 0;
    //M1.row(0) = row + 0;
    //M1.row(1) = 0;
    //M1.row(1) = row2 + 0;
    cvSetZero(M1);

    /*for(int i=0;i<5;i++)
    {
        for(int j=0;j<row->width;j++)
        {
            CV_MAT_ELEM( *M1, float, i, j ) = CV_MAT_ELEM( *rowi, float, 0, i );*/

    for(int i=0;i<row->width;i++)
    {
        CV_MAT_ELEM( *M1, float, 0, i ) = CV_MAT_ELEM( *row, float, 0, i );
    }

    for(int j=0;j<row2->width;j++)
    {
        CV_MAT_ELEM( *M1, float, 1, j ) = CV_MAT_ELEM( *row2, float, 0, j );
    }
    for(int k=0;k<row2->width;k++)
    {
        CV_MAT_ELEM( *M1, float, 2, k ) = CV_MAT_ELEM( *row3, float, 0, k );
    }
    for(int l=0;l<row2->width;l++)
    {
        CV_MAT_ELEM( *M1, float, 3, l ) = CV_MAT_ELEM( *row3, float, 0, l );
    }
    for(int m=0;m<row2->width;m++)
    {
        CV_MAT_ELEM( *M1, float, 4, m ) = CV_MAT_ELEM( *row4, float, 0, m );
    }
CvMat*M1;
//cv::材料M1(2,行->宽度,cv_32FC1);
M1=cvCreateMat(5,行->宽度,CV_32FC1);
//行复制到(M1.行(0));
//第2行。复制到(M1。第(2)行);
//M1.行(0)=0;
//M1.行(0)=行+0;
//M1.第(1)行=0;
//M1.行(1)=行2+0;
cvSetZero(M1);

/*对于(int i=0;我感谢你的链接和解释,我确实看过了,我有一些问题,如果有人能回答,我将不胜感激。因此我有5-1行矩阵(假设它们是x=[1,2,3]y=[4,5,6]),我想将它们合并,为此我将创建另一个矩阵。
M1=cvCreateMat(5,50,CV_32FC1);Mat M1=x.row(1);Mat M1=y.row(1);…
那么,嗯?这行吗?这是我从链接中获得的,但我认为我并不完全理解它,就像每次我说Mat M1=z.row(1)一样我会用更新的代码编辑我的问题,请你看一下。感谢复制方法不起作用,除了我的M1矩阵之外,所有其他类型都是CVARR…..Car并不能在CVARR上工作。这就是为什么我说:学习OpenCV的C++ API。我不能在C上给出建议。API。如果你不想学习它,那么从你的问题中删除C++标签,加上C标签,你就会得到C答案。有人吗?我能得到一些帮助吗?请接受这个答案。谢谢。