Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将openCV矩阵转换为向量_Opencv_Vector_Matrix - Fatal编程技术网

将openCV矩阵转换为向量

将openCV矩阵转换为向量,opencv,vector,matrix,Opencv,Vector,Matrix,看起来似乎很简单。毕竟,我们知道std或openCV向量可以很容易地转换为如下矩阵: vector<Point> iptvec(10); Mat iP(iptvec); 矢量iptvec(10); Mat-iP(iptvec); openCV备忘单中建议使用相反的方法: vector<Point2f> ptvec = Mat_ <Point2f>(iP); vector ptvec=Mat(iP); 但是,有一个警告:矩阵必须只有一行或一列。要转换任意

看起来似乎很简单。毕竟,我们知道std或openCV向量可以很容易地转换为如下矩阵:

vector<Point> iptvec(10);
Mat iP(iptvec);
矢量iptvec(10);
Mat-iP(iptvec);
openCV备忘单中建议使用相反的方法:

vector<Point2f> ptvec = Mat_ <Point2f>(iP);
vector ptvec=Mat(iP);
但是,有一个警告:矩阵必须只有一行或一列。要转换任意矩阵,必须重塑形状:

int sz = iP.cols*iP.rows;
vector<Point2f> ptvec = Mat <Point2f>(iP.reshape(1, sz));
int sz=iP.cols*iP.rows;
向量ptvec=Mat(iP.重塑(1,sz));
否则,您将得到一个错误:


*OpenCV错误:在create,file/home/../OpenCV-2.4.2/modules/core/src/matrix.cpp,第1385行中,断言失败(dims==2&&(size[0]==1 | | | | size[1]==1 | | | size[0]*size[1]==0]),创建一个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);
}
Mat iP=Mat::零(10,20,CV_8UC1);
载体ptvec;
对于(int i=0;i
请注意,当您创建一个已知大小的向量时,最好预先分配内存,因为存在巨大的性能差异。所以,最好这样做:vector ptvec(iP.rows,vector(iP.cols));