将openCV矩阵转换为向量

Posted

技术标签:

【中文标题】将openCV矩阵转换为向量【英文标题】:convert openCV matrix into vector 【发布时间】:2013-05-10 01:06:47 【问题描述】:

看起来很简单。毕竟我们知道一个 std 或 openCV 向量可以很容易地转换成这样的矩阵:

vector<Point> iptvec(10);
Mat iP(iptvec);

openCV 备忘单中建议反过来:

vector<Point2f> ptvec = Mat_ <Point2f>(iP);

但是,有一个警告:矩阵必须只有一行或一列。要转换任意矩阵,您必须重塑:

int sz = iP.cols*iP.rows;
vector<Point2f> ptvec = Mat <Point2f>(iP.reshape(1, sz));

否则会报错:

*OpenCV 错误:创建中的断言失败 (dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0)) ,文件/home/.../OpenCV-2.4.2/modules/core/src/matrix.cpp,第1385行...

【问题讨论】:

【参考方案1】:

创建一个 2dim 向量并填充每一行。例如:

Mat iP=Mat::zeros(10, 20, CV_8UC1);
vector<vector<int>> ptvec;
for (int i = 0; i < iP.rows; i++)

    vector<int> row;    
    iP.row(i).copyTo(row);
    ptvec.push_back(row);

【讨论】:

请注意,当您创建一个已知大小的向量时,最好预先分配内存,因为存在巨大的性能差异。因此,最好这样做:vector > ptvec(iP.rows, vector(iP.cols));

以上是关于将openCV矩阵转换为向量的主要内容,如果未能解决你的问题,请参考以下文章

通过单应矩阵转换向量时出错 - C++ OpenCV

Python旋转矩阵与旋转向量的相互转换(OpenCV)

Python旋转矩阵与旋转向量的相互转换(OpenCV)

Python旋转矩阵与旋转向量的相互转换(OpenCV)

使用opencv将旋转矩阵旋转到欧拉角

opencv编程中cvMat到Mat如何进行数据转换?