OpenCV向量到Mat但不是element->行

时间:2011-12-04 16:51:28

标签: opencv vector matrix

有一种非常简单的方法可以从向量构建Mat ...只需执行:

vector<int> myVector;
Mat myMatFromVector(myVector,true); //the boolean is to define if you want to copy the data

这个构造函数的问题是每个向量的元素都将放在Matrix的每一行中。我想要的是我的矢量的每个元素都放在矩阵的每一列中。

As is:
vector<int> = [1,2,3,4]
Matrix = [1;2;3;4]

I want:
vector<int> = [1,2,3,4]
Matrix = [1,2,3,4]

2 个答案:

答案 0 :(得分:5)

指定Matrix的形状和类型并传递矢量数据

   // constructor for matrix headers pointing to user-allocated data
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP);
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP);

或者在Mat上调用reshape来交换行沙列的数量(不会更改任何数据)

    // creates alternative matrix header for the same data, with different
    // number of channels and/or different number of rows. see cvReshape.
    Mat reshape(int _cn, int _rows=0) const;

答案 1 :(得分:2)

通过主矩形对角线反射矩阵(即交换行和列)形成的矩阵称为转置。使用OpenCV,您可以轻松获得矩阵A的转置为:

Mat A;
Mat A_transpose = A.t();

如果A是[1; 2; 3; 4],A_transpose根据需要为[1,2,3,4]。

因此,您可以在从矢量转换后创建矩阵的转置副本,也可以在计算中随后需要时轻松创建矩阵。

Mat A, B;
Mat answer = A.t() * B;