c++ - OpenCv copyTo() 不工作

标签 c++ opencv

我想使用 openCv 的 copyTo() 函数对图像应用蒙版,但蒙版不起作用。我仍然获得相同的图像。

当我在网上搜索时,我看到了一些建议,例如:

-源图像和目标图像必须不同, -源图像必须具有 CV_8U 类型, -掩码图像必须具有 CV_8U 等类型。

我尝试了所有方法,但无法解决问题。此外,在 OpenCv 官方网站上,没有提及此类限制。

这是我的部分代码:

Mat source; //initialized in some way
Mat mask; // this is also initialized in some way

source.copyTo(source, mask);

最佳答案

您的蒙版应该是单 channel 图像,其值为 0255

Mat mask(source.rows, source.cols, CV_8UC1, Scalar(0));

使用上面的掩码图像,您应该在目标中得到一个空白图像,因为所有掩码值都是零。

并且使用以下 mask ,您应该能够获得与源图像相同的目标图像,因为您的整个 mask 图像都被值 255 激活。

Mat mask(source.rows, source.cols, CV_8UC1, Scalar(255));

对于一些只有少数图像区域包含白色像素的其他蒙版,您将在目标图像中获得源图像的那个区域。

关于c++ - OpenCv copyTo() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32351494/

相关文章:

c++ - 与数组的虚拟串联

ubuntu - 尝试制作时出现opencv安装错误

c++ - 指向同一类类型设计可行性的指针 vector

c++ - 在 visual studio 2010 的 mfc 对话框中单击 "ok"后,如何使控制台应用程序运行?

opencv - 通过轮廓与特征进行物体识别

python - 在Python中从图像中提取每个像素的x,y坐标

java - OpenCV4Android 默认的 Mat 图像类型是什么?

android - 改变图像的色调

c++ - 调用另一个类c++中的成员函数

c++ - 如何在RapidJSON中重用Stack Allocator而不重新分配内存