dmi*_*dop 4 c++ opencv image colors image-processing
我在谷歌上搜索了很多关于这个问题,但我无法解决它。
所以,我应该将 16 位 3 通道图像转换为 8 位 1 通道图像。我在cv::inpaint函数中使用这个二进制图像。maskBGR,只有两种颜色 - 黑色和白色,是我的源图像。
所以,有代码:
Mat mask;
maskBGR.convertTo(mask, CV_8UC1);
inpaint(image, mask, dst, 8, cv::INPAINT_TELEA);
Run Code Online (Sandbox Code Playgroud)
之后我的程序崩溃了。这是在命令行中写的:
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
Run Code Online (Sandbox Code Playgroud)
在 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" );
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
convertTo()只改变通道的类型,而不是通道的数量。
对于 8 位、3 通道,它将是:
cvtColor(maskBGR, mask, CV_BGR2GRAY);
Run Code Online (Sandbox Code Playgroud)
如果你的 maskBGR 真的是 16 位,3 个通道,你需要 2 个步骤:
maskBGR.convertTo(maskBGR, CV_8U);
cvtColor(maskBGR, mask, CV_BGR2GRAY);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14386 次 |
| 最近记录: |