2017-02-15 23 views
2

OpenCVのWebサイトで入手できるチュートリアルを使用してYAMLファイルからデータを読み込もうとしています。私は ">>"演算子を使用しています。OpenCv倍精度のマットを読むYAML

cv::Mat R; 
cv::FileStorage fs; 
fs.open(filename, cv::FileStorage::READ); 
R >> fs["matrix"]; 

これは基本的には動作しますが、浮動小数点精度ではない倍精度にすることをお勧めします。行列Rをダブル・マトリックスとしてタイプすることは、その仕事をしません。これを達成する正しい方法は何でしょうか。 「倍精度」としてイメージをロードする

+0

yamlファイル内のデータは倍精度です。私が上記のようなコードを変更しているなら、cv :: Mat R = cv :: Mat(3,3、CV_64F);データR >> fs ["matrix"]を読み出す。行列は浮動小数点型になります。 – user1638795

+0

いいえ、そうではありません。 ymlファイルを開き、 "type"フィールドをチェックします。何番ですか? – Miki

+0

あなたは正しいです。私はロードしているファイルにデータが入力されていることを知らなかった。どうもありがとうございました。 – user1638795

答えて

0

は、タイプCV_64Fの別名、画像はまた、CV_64Fとして格納する必要があります。

画像が「単精度」として保存されている場合は、タイプCV_32Fの別名、あなたはしかしCV_32Fとしてそれをロードすることができ、その後でCV_64Fに変換:あなたがの形式を確認することができます

R.convertTo(R, CV_64F); 

保存された行列はymlファイルを開き、フィールドdtをチェックします。 CV_32Fフォーマットの場合、が入り、CV_64Fフォーマットの場合はdとなります。