将CV_32FC1类型的Matrix转换为CV_64FC1

Una*_*dra 38 double opencv matrix

如何转换简历::类型CV_32FC1的垫子类型CV_64FC1(相当于从浮到双的变化)?

我打开一个保存为XML(cvSave)但作为浮点数的矩阵.这意味着该字段<dt>具有f文件中的值.我需要将其更改d为打开它.但我宁愿没有这样做,而是我想直接与双类型的元素打开它作为一个矩阵,或稍后从浮翻一番转换.

下面是我打开文件的代码.

/** 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;
}
Run Code Online (Sandbox Code Playgroud)

Una*_*dra 67

好吧,我是个傻瓜.这是怎么回事:

有功能convertTo完全符合我的要求.

感谢opencv中的矩阵类型转换,以指出这一点.

我是这样做的:

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

  • 此外,如果您要从16U转换为8U,则需要添加缩放系数作为第三个参数.`A.convertTo(A,CV_8UC1,255.0/65536.0);` (12认同)
  • (无论是否昏迷,你的问答让我找到了关键字 [convertTo](https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html#adf88c60c5b4980e05bb556080916978b)。很难查到一些东西在文档中不知道其名称!)请注意,此示例“A.convertTo(A, CV_64F)”在不进行就地转换时对于转换方向不明确。事实上,它是“source.convertTo(destination, new_type, ...)”。这完全符合 OpenCV 风格,但我错过了这一点,把它倒过来,并花了一段时间试图理解我的错误。 (3认同)