преобразовать матрицу типа CV_32FC1 в CV_64FC1 - PullRequest
37 голосов
/ 02 августа 2011

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

Я открываю матрицу, которая была сохранена как 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;
}

1 Ответ

64 голосов
/ 02 августа 2011

Хорошо, я тупица. Вот как это происходит:

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

Спасибо за преобразование типа матрицы в opencv за указание на это.

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

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