将矩阵中的列向量复制到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中另一个矩阵的每个列中的主要内容,如果未能解决你的问题,请参考以下文章

将一个矩阵块复制到 OPENCV 中的另一个矩阵块

如何将矩阵的每一行除以R中的向量元素

怎样用matlab实现:一个列向量与矩阵的每一列做点乘?

如何将矩阵转换为 R 中的列向量列表?

OpenCV创建矩阵,每行包含多个图像

OpenCV:如何有效地将 Mat2d 矩阵的每个元素乘以 Mat1d 矩阵