web-dev-qa-db-fra.com

convertir la matrice de type CV_32FC1 en CV_64FC1

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

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

Ci-dessous mon code pour ouvrir le 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;
}
37
Unapiedra

D'accord, je suis un imbécile. Voici comment ça se passe:

Il y a la fonction convertTo qui fait exactement ce que je veux.

Merci pour conversion de type de matrice en opencv pour l'avoir signalé.

Voici comment je le fais:

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