将矩阵中的列向量复制到opencv中另一个矩阵的每个列中
Posted
技术标签:
【中文标题】将矩阵中的列向量复制到opencv中另一个矩阵的每个列中【英文标题】:copy column vector from a matrix into each col of another matrix in opencv 【发布时间】:2014-02-05 02:26:06 【问题描述】:这可能很简单,但我确实找不到有效的答案,抱歉...
假设我有一个矩阵 A,我想将它的第一列多次复制到矩阵 B 中;即;
A = [1 2 3; 2 3 4; 5 6 7]
我想提取
A(:,1);
并将这个向量复制到另一个矩阵 B 中,从而将我们带到
B = [1 2 3; 1 2 3; 1 2 3];
在下一个循环之后,B 将是:
B = [2 3 4; 2 3 4; 2 3 4];
依此类推,直到我按顺序获得矩阵 B 中的所有 A 列
opencv 中是否有实用的解决方案?我已经尝试使用 copyTo()、Range 和 row、col,但我什么也没得到。非常感谢您的帮助。
问候;
杰恩。
【问题讨论】:
【参考方案1】:只需使用Mat::row 循环访问矩阵的每一行,然后使用Mat::copyTo 将选定行复制到新 Mat
查看示例
Mat A=(Mat_<uchar>(3,3)<< 1,2,3,\
2,3,4,\
5,6,7);
Mat B(A.rows,A.cols,CV_8UC1);
for(int i=0;i<A.rows;i++)
for(int j=0;j<A.rows;j++)
A.row(i).copyTo(B.row(j));
cout<<B<<endl;
您也可以使用Mat::push_back 来执行此操作。
查看示例
Mat A=(Mat_<uchar>(3,3)<< 1,2,3,\
2,3,4,\
5,6,7);
for(int i=0;i<A.rows;i++)
Mat B;
for(int j=0;j<A.rows;j++)
B.push_back(A.row(i));
cout<<B<<endl;
【讨论】:
非常感谢您的帮助,这正是我所需要的。问候以上是关于将矩阵中的列向量复制到opencv中另一个矩阵的每个列中的主要内容,如果未能解决你的问题,请参考以下文章