Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 将CV_32FC1类型的矩阵转换为CV_64FC1_Opencv_Matrix_Double - Fatal编程技术网

Opencv 将CV_32FC1类型的矩阵转换为CV_64FC1

Opencv 将CV_32FC1类型的矩阵转换为CV_64FC1,opencv,matrix,double,Opencv,Matrix,Double,如何将cv_32FC1类型的cv::Mat转换为cv_64FC1类型(相当于从float更改为double) 我正在打开一个保存为XML(cvSave)但作为浮点的矩阵。这意味着字段在文件中具有值f。我需要将其更改为d才能打开它。但我不希望这样做,而是希望直接将其作为包含double类型元素的矩阵打开,或者稍后将其从float转换为double 下面是我打开文件的代码 /** Load cv::Mat from XML file. */ cv::Mat loadMat(const std::

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

我正在打开一个保存为XML(
cvSave
)但作为浮点的矩阵。这意味着字段
在文件中具有值
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;
}

好吧,我是个傻瓜。事情是这样的:

有一个convertTo函数,它完全符合我的要求

谢谢你指出这一点

我是这样做的:

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)(不管你是否聪明,你的问题和回答让我能够找到关键词。在不知道名称的情况下很难在文档中查找某些内容!)请注意,此示例
A.convertTo(A,cv64f)
在未进行转换时,对转换方向不明确。实际上,它是源.convertTo(目标,新类型,…)。这完全符合OpenCV风格,但我忽略了这一点,将其向后推,并花了一段时间试图理解我的错误。