Как объединить 5 матриц в c ++ / opencv - PullRequest
4 голосов
/ 13 июля 2011

У меня есть 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 ]

4 голосов
/ 13 июля 2011

Прежде всего, изучите C ++ API OpenCV .

Тогда сделай что-нибудь. как это:

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

0 голосов
/ 30 апреля 2018

Решение по ОП.

Я исправил это с помощью следующего кода:

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 столбцов .. каждая строка представляет отдельную матрицу .. row, row2, row3, row4 и row5

...