如何正确转换 cv::Mat 到 CV_8UC1.

How to correctly convert cv::Mat to CV_8UC1?

本文关键字:CV 8UC1 Mat 转换 cv 何正确      更新时间:2023-10-16

我用谷歌搜索了很多关于这个问题的信息,但我无法解决它。
因此,我应该将 16 位 3 通道图像转换为 8 位 1 通道图像。我在cv::inpaint函数中使用此二进制图像。
maskBGR只有两种颜色 - 黑色和白色,是我的源图像。
所以,有代码:

Mat mask;
maskBGR.convertTo(mask, CV_8UC1);
inpaint(image, mask, dst, 8, cv::INPAINT_TELEA);

在那之后,我的程序崩溃了。这是在命令行中写的:

OpenCV Error: Unsupported format or combination of formats (The mask must be
8-bit 1-channel image) in unknown function, file ......srcopencvmodules
photosrcinpaint.cpp, line 747

在 inpaint.cpp 中,第 747 行:

if( CV_MAT_TYPE(inpaint_mask->type != CV_8UC1 )
   CV_ERROR( CV_StsUnsupportedFormat, "The mask must be 8-bit 1-channel image" );

我做错了什么?

convertTo() 只更改通道的类型,而不更改通道的数量。

对于 8 位、3 通道,它将是:

cvtColor(maskBGR, mask, CV_BGR2GRAY);

如果你的掩码BGR真的是16位,3个通道,你需要2个步骤:

maskBGR.convertTo(maskBGR, CV_8U);
cvtColor(maskBGR, mask, CV_BGR2GRAY);