如何将 cv::Mat 类型从 CV_16UC1 转换为 CV_8UC1

Posted

技术标签:

【中文标题】如何将 cv::Mat 类型从 CV_16UC1 转换为 CV_8UC1【英文标题】:How to convert cv::Mat type from CV_16UC1 to CV_8UC1 【发布时间】:2013-09-27 03:00:46 【问题描述】:

我有一个 CV_16UC1 类型的 cv::Mat 图像,我需要在 CV_8UC1 中使用它,所以我可以在其上运行 cv::integral。我不担心转换过程中的溢出——本质上我只是想将图像从 unsigned short 批量转换为 unsigned char。

我在别处问过,有人建议cvtColor,但我不知道用什么转换代码。

【问题讨论】:

docs.opencv.org/modules/core/doc/… 【参考方案1】:

使用 Mat::convertTo 怎么样? Documentation

一个简单的例子:(不确定是否需要比例因子,因为我没有尝试过)

Your16Image.convertTo(outputImage, CV_8UC1, scalefactor)

【讨论】:

这对我有用 - 但结果我也需要 cv::threshold 因为我想将二进制图像输入到 cv::integral。注意以防有人遇到类似问题。 cv::threshold(m, binary, 0, 1, CV_THRESH_BINARY); 你使用了比例因子吗? (您可以发布所有步骤吗...?)。谢谢【参考方案2】:

您可以使用cv::convertScaleAbs 直接将您的输出矩阵设置为无符号字符。

【讨论】:

以上是关于如何将 cv::Mat 类型从 CV_16UC1 转换为 CV_8UC1的主要内容,如果未能解决你的问题,请参考以下文章

如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?

从 java opencv 中的字节数组创建 CV_16UC1 Mat

将 Magick::Image 转换为 cv::Mat

open cv mat怎样将数据类型转化为double

opencv cv::mat::data是什么数据类型?

如何从 cv::Mat 转换为 CvArr?