gpt4 book ai didi

c++ - 如何正确地将 cv::Mat 转换为 CV_8UC1?

转载 作者:太空狗 更新时间:2023-10-29 20:58:33 25 4
gpt4 key购买 nike

我在谷歌上搜索了很多关于这个问题,但我无法解决它。
因此,我应该将 16 位 3 channel 图像转换为 8 位 1 channel 图像。我在 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 ..\..\..\src\opencv\modules\
photo\src\inpaint.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()只改变 channel 的类型,不改变 channel 的数量。

对于 8 位、3 channel 它将是:

cvtColor(maskBGR, mask, CV_BGR2GRAY);

如果你的maskBGR真的是16位,3 channel ,你需要2个步骤:

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

关于c++ - 如何正确地将 cv::Mat 转换为 CV_8UC1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27431564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com