2011-08-02 40 views
29

CV_32FC1型のcv :: MatをCV_64FC1型に変換するにはどうすればよいですか(floatからdoubleへの変更に相当)?CV_32FC1型の行列をCV_64FC1に変換

XML(cvSave)として保存されていて、フロートとして保存されたマトリックスを開きます。これは、フィールド<dt>の値がfであることを意味します。それを開くにはdに変更する必要があります。しかし、私はむしろこれをやりたいのではなく、double型の要素を持つ行列として直接開いたり、後でfloatからdoubleに変換したりしたいと思います。

以下は私のファイルを開くためのコードです。

/** Load cv::Mat from XML file. 
*/ 
cv::Mat loadMat(const std::string filename) 
{ 
    cv::Mat result; 
    cv::FileStorage fs(filename, cv::FileStorage::READ); 
    fs.getFirstTopLevelNode() >> result; 
    return result; 
} 

答えて

51

わかりました。私はうんざりです。ここにそれは行く方法です:

正確に私がしたいことを行う変換機能があります。

ありがとうございましたmatrix type conversion in opencvありがとうございます。ここで

が、私はそれを行う方法である。また、

cv::Mat A = loadMat("mymat.xml"); // See function loadMat in the question! 
A.convertTo(A, CV_64F); 
+6

、あなたは8Uに16Uのようなものから変換している場合、あなたは三番目のパラメータとして倍率を追加する必要があります。 'A.convertTo(A、CV_8UC1,255.0/65536.0);' –