【问题标题】:convert Matrix of type CV_32FC1 to CV_64FC1将 CV_32FC1 类型的矩阵转换为 CV_64FC1
【发布时间】:2011-10-18 03:05:01
【问题描述】:

如何将 CV_32FC1 类型的 cv::Mat 转换为 CV_64FC1 类型(相当于从 float 更改为 double)?

我正在打开一个保存为 XML (cvSave) 但作为浮点数的矩阵。这意味着字段<dt> 在文件中具有值f。我需要将其更改为d 才能打开它。但我宁愿不这样做,而是想直接将它作为具有 double 类型元素的 Matrix 打开,或者稍后将其从 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;
}

【问题讨论】:

    标签: opencv matrix double


    【解决方案1】:

    好吧,我是个笨蛋。事情是这样的:

    有一个函数 convertTo 正是我想要的。

    感谢matrix type conversion in opencv 指出这一点。

    这是我的做法:

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

    【讨论】:

    • 另外,如果您要从 16U 转换为 8U,则需要添加缩放因子作为第三个参数。 A.convertTo(A, CV_8UC1, 255.0/65536.0);
    • (无论是否愚蠢,您的问答让我找到了关键字convertTo。在不知道其名称的情况下很难在文档中查找内容!)请注意此示例@987654325 @ 在没有进行就地转换时,对于转换的方向是模棱两可的。事实上,它是source.convertTo(destination, new_type, ...)。这完全符合 OpenCV 风格,但我错过了这一点,把它倒过来,花了一段时间试图理解我的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多