C++ 如何在c+中组合5个矩阵+/opencv
我有5个mxn矩阵。。首先,我使用以下代码将它们转换为1行矩阵: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
//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答案。有人吗?我能得到一些帮助吗?请接受这个答案。谢谢。