2016-08-24 2 views
2

은 내가 매트 얻으려고 :어떻게 매트를 더블 배열에서 초기화 할 수 있습니까?

cout << getMat() << endl; 

하지만 내가 얻을 : 주요 기능에

Mat getMat(){ 
double data[9] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; 
Mat H = Mat(3, 3, CV_64FC1, data); 
return H; 
} 

을 내가 가진

[9.803620554343549e-312, 9.815415529972478e-312, -5.314010372517808e+303; 
6.952533064904583e-310, 6.952533112667539e-310, 6.952533065625869e-310; 
6.952531771280892e-310, 6.952531720111155e-310, 1.30821040513014e-310] 

내가 함수 내에서 인쇄 할 때 작동 ..

+2

이 코드는 작동합니다. 두 번 확인하여 실제 코드 – Miki

+0

을 게시했는지 확인하십시오. .. 고맙습니다. .. 정말로 Mat getMat() 함수에서 H를 반환하고 다음을 수행합니다. << geMat() –

+1

D가 도움이되지 않습니다. D. [mcve] – Miki

답변

4

data 버퍼가 할당되면 취소됩니다. getMat 기능을 사용하면 가비지가 포함됩니다.

당신은 clone()와 데이터 버퍼를 복사해야합니다 : 작은 행렬에 대한

Mat getMat(){ 
    double data[9] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0}; 
    Mat H = Mat(3, 3, CV_64FC1, data).clone(); 
    return H; 
} 

, 당신은 또한 사용할 수 있습니다 나를 위해 예상대로

Mat getMat(){ 
    Mat H = (Mat1d(3, 3) << 0.0, 1.0, 2.0, 
          3.0, 4.0, 5.0, 
          6.0, 7.0, 8.0); 
    return H; 
} 
+0

감사합니다. 나는 이해한다. 그러나 나는 돌아 오기 전에 미리 계산한다. 당신이 나에게 준 첫 번째 옵션을 시도해 볼게 .. –

+0

그것은 작동합니다. 고맙습니다. 나는 블록과 할당 해제에 더주의를 기울일 것이다. : P –

+0

다행히 도왔다; D – Miki

관련 문제