Подтвердить что ты не робот

Преобразовать матрицу типа CV_32FC1 в CV_64FC1

Как преобразовать cv:: Mat типа CV_32FC1 в тип CV_64FC1 (эквивалентно изменению от float до double)?

Я открываю матрицу, которая была сохранена как XML (cvSave), но как float. Это означает, что поле <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;
}
4b9b3361

Ответ 1

Хорошо, я тупой. Вот как это делается:

Существует функция convertTo, которая делает именно то, что я хочу.

Спасибо за преобразование матричного типа в opencv для указания этого.

Вот как я это делаю:

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