如何正确转换 cv::Mat 到 CV_8UC1.
How to correctly convert cv::Mat to CV_8UC1?
我用谷歌搜索了很多关于这个问题的信息,但我无法解决它。
因此,我应该将 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);
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 概念中的cv限定符需要表达式参数列表
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 如何检查给定的参数是否为 cv::noArray()?
- 开放 CV 中的动态内存分配,用于视频处理
- 如何在 opencv 中使用 cv::VideoCapture::waitAny()
- 错误:未定义对cv::cudacodec::createVideoReader的引用
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::mat 转换为 QImage
- Inference pytorch C++ with alexnet and cv::imread image
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- cv::Normalise() 中的 L2_NORM 和 NORM_MINMAX 实现有什么区别?
- 将 cv::Mat 转换为 std::vector 的通用函数
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- 在 QML VideoOutput 中将 cv::mat 显示为 QVideoFrame
- 如何应用带有cv::cuda和C++的Canny Edge检测器?
- cv::connectedComponents vs cv::findContours 的实现和速度差异