2017-03-05 28 views
0

https://github.com/opencv/opencv/blob/master/samples/cpp/stitching_detailed.cppで定義されているCameraParamsを保存しました。私は以下のスクリプトを使用してファイルをYMLするために、このカメラパラメータを書いたintialize ymlファイルのカメラパラメータopencv C++

struct CV_EXPORTS CameraParams 
{ 
    CameraParams(); 
    CameraParams(const CameraParams& other); 
    const CameraParams& operator =(const CameraParams& other); 
    Mat K() const; 

    double focal; // Focal length 
    double aspect; // Aspect ratio 
    double ppx; // Principal point X 
    double ppy; // Principal point Y 
    Mat R; // Rotation 
    Mat t; // Translation 
}; 

<cameraParams> cameras; 
FileStorage fs(fileName, FileStorage::WRITE); 
fs << "K" << cameras.K(); 
fs << "R" << cameras.R; 
fs << "t" << cameras.t; 
fs << "ppx" << cameras.ppx; 
fs << "ppy" << cameras.ppy; 
fs << "focal" << cameras.focal; 
fs << "aspect" << cameras.aspect; 
fs.release(); 

、ここではどのようにファイルの内容は次のようになりです。ここのようなカメラパラメータ構造がどのように見えるかです

%YAML:1.0 
--- 
K: !!opencv-matrix 
    rows: 3 
    cols: 3 
    dt: d 
    data: [ 2.4125938056164614e+003, 0., 447., 0., 
     2.4125938056164614e+003, 3.3550000000000000e+002, 0., 0., 1. ] 
R: !!opencv-matrix 
    rows: 3 
    cols: 3 
    dt: f 
    data: [ -9.67408061e-001, 7.91518241e-002, -2.40534484e-001, 
     -4.17553373e-002, -9.86752093e-001, -1.56770796e-001, 
     -2.49756604e-001, -1.41617730e-001, 9.57896829e-001 ] 
t: !!opencv-matrix 
    rows: 3 
    cols: 1 
    dt: d 
    data: [ 0., 0., 0. ] 
ppx: 447. 
ppy: 3.3550000000000000e+002 
focal: 2.4125938056164614e+003 
aspect: 1. 

ここでは、これらの同じパラメータを使用して読み込みますが、これは動作しません(実行時エラーが発生します)。ここに使用されている読み込み関数は次のとおりです。

Mat K, R, t; 
    double ppx, ppy, focal, aspect; 
    FileStorage fs(fileName, FileStorage::READ); 
    fs["K"] >> K; 
    fs["R"] >> R; 
    fs["t"] >> t; 
    fs["ppx"] >> ppx; 
    fs["ppy"] >> ppy; 
    fs["focal"] >> focal; 
    fs["aspect"] >> aspect; 
    camerasTest[i].K() = (Mat)K; 
    camerasTest[i].R = R; 
    camerasTest[i].t = t; 
    camerasTest[i].ppx = (double)ppx; 
    camerasTest[i].ppy = (double)ppy; 
    camerasTest[i].focal = (double)focal; 
    camerasTest[i].aspect = (double)aspect; 
    fs.release() 

これをどのように解決できますか?

+0

は正しいですか?行は実行時にエラーを出しますか?私はあなたが "ppx"を2回読む(それが関連しているかどうかわからない)ことを知っている。 – Alexander

+0

はいファイル名が間違っていて、ppxを間違えて読んでいました。私はそれを訂正した。ありがとう – deathracer

答えて

0

「K」の初期化のどこかにエラーがありました。私はこの変更を行い、作業を開始しました。

for (int i = 0; i < num_images; ++i) 
{ 
    Mat_<float> K; 
    cameras[i].K().convertTo(K, CV_32F); 
} 
+0

あなたの答えは合格とマークしてください。それでこの質問に答えていることは明らかです – slawekwin

関連する問題