2013-05-10 6 views
4

믿을 수 없을만큼 쉽게 보입니다. 결국 우리는 표준 또는 OpenCV의 벡터 쉽게 다음과 같이 매트릭스로 변환 할 수 있다는 사실을 알고 : 반대는 OpenCV의의 쪽지에 제안openCV 매트릭스를 벡터로 변환

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

:

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

그러나 한 가지주의가 : 매트릭스를 단 하나의 행 또는 하나의 열만 가져야합니다.

* OpenCV의 오류 :

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

은 그렇지 않으면 오류가 발생합니다 : 임의의 행렬을 변환하려면 당신이 바꿀 필요가 | 어설 션이 실패 (== 2 & & (크기 [0] == 1 어두워 size [1] == 1 || sizes [0] * sizes [1] == 0)) in 파일, /home/.../OpenCV-2.4.2/modules/core/src/matrix.cpp , 1385 ...

+3

이 질문은 무엇입니까? – alrikai

답변

1

2 차원 벡터를 만들고 각 행을 채 웁니다. 예 :

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); 
} 
+0

알려진 크기의 벡터를 만들 때 성능 차이가 크기 때문에 항상 메모리를 미리 할당하는 것이 좋습니다. 따라서, 다음을 수행하는 것이 바람직합니다. 벡터 > ptvec (iP.rows, 벡터 (iP.cols))); – kotakotakota