Opencv 将CV_32FC1类型的矩阵转换为CV_64FC1
如何将cv_32FC1类型的cv::Mat转换为cv_64FC1类型(相当于从float更改为double) 我正在打开一个保存为XML(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::
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风格,但我忽略了这一点,将其向后推,并花了一段时间试图理解我的错误。