有一种非常简单的方法可以从向量构建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]
答案 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;