2011-08-02 5 views
29

Comment convertir un cv :: Mat de type CV_32FC1 en type CV_64FC1 (équivalent à un changement de float en double)?convertir Matrice de type CV_32FC1 en CV_64FC1

J'ouvre une matrice qui a été enregistrée en XML (cvSave) mais en tant que flottant. Cela signifie que le champ <dt> a la valeur f dans le fichier. Je dois le changer à d pour l'ouvrir. Mais je préférerais ne pas le faire, à la place je voudrais l'ouvrir directement en tant que Matrix avec des éléments de type double, ou le convertir plus tard de float en double.

Ci-dessous est mon code pour l'ouverture du fichier.

/** 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; 
} 

Répondre

51

D'accord, je suis un dimwit. Voici comment ça se passe:

Il y a la fonction convertTo qui fait exactement ce que je veux. Merci pour matrix type conversion in opencv pour souligner cela.

Voici comment je le fais:

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

De plus, si vous convertissez de quelque chose comme 16U à 8U, vous devez ajouter un facteur de mise à l'échelle en tant que troisième paramètre. 'A.convertTo (A, CV_8UC1, 255.0/65536.0);' –

Questions connexes