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

时间:2011-07-13 15:55:17

标签: c++ opencv

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

//now converting to 1 row matrix
CvMat row_header, *row;
row = cvReshape(mat, &row_header, 0, 1)

这是正确的吗?

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

2 个答案:

答案 0 :(得分:4)

首先,学习OpenCV的C ++ API

然后做某事。像这样:

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

来源:http://opencv.itseez.com/modules/core/doc/basic_structures.html?highlight=mat_#mat-row

答案 1 :(得分:0)

OP解决方案。

我用以下代码修复了它:

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 );
    }

矩阵M1是一个5列矩阵,有50列..每行代表一个单独的矩阵..行,行2,行3,行4和行5