OpenCV 中的 CV_8UC1 到 CV_32FC1 的转换

Posted

技术标签:

【中文标题】OpenCV 中的 CV_8UC1 到 CV_32FC1 的转换【英文标题】:CV_8UC1 to CV_32FC1 conversion in OpenCV 【发布时间】:2013-07-19 12:14:53 【问题描述】:

我们在 OpenCV 中使用 C++ API 将图像类型从 CV_8UC1 转换为 CV_32FC1 的方式是

        r1.convertTo(r1, CV_32FC1, 1.0/255.0);

其中r1 是声明为cv::Mat 的矩阵。 谁能告诉我如何使用 C API 在 OpenCV 中从 CV_8UC1 转换为 CV_32FC1 类型?如果r2 是描述为CvMat* r2 的矩阵。

【问题讨论】:

【参考方案1】:

cvConvertScale() 可以为所欲为。

假设您有一个 8UC1 类型的 cvMat* r1 和一个 32FC1 类型的 cvMat* r2 并且大小相同

cvConvertScale(r1, r2, 1.0 / 255.0, 0.0);

由于目标类型取自 r2,它不能和 r1 是相同的 cvMat。

【讨论】:

我的代码崩溃了。文档说明,它是用于转换 CvArr 类型的旧式 C 函数:C: void cvConvertScale(const CvArr* src, CvArr* dst, double scale=1, double shift=0)。是否也适用于 cv::Mat? 不,cvConvertScale() 不适合 cv::Mat。这个问题实际上说明了如何处理 cv::Mat。

以上是关于OpenCV 中的 CV_8UC1 到 CV_32FC1 的转换的主要内容,如果未能解决你的问题,请参考以下文章

opencv mat的数据类型CV_32FC1变成CV_8UC1

OpenCV——图像的深度与通道数讲解

如何将 OpenCV 中的adaptiveThreshold 用于大于 255 的值(即类型 CV_8UC1)?

OpenCV学习OpenCV中CV_8UC3等宏定义的含义

OpenCV 转换慢

CGBitmapContextCreate for CV_8UC3(在 OpenCV 中使用)