OpenCV grabcut:如何结合GC_INIT_WITH_RECT和GC_INIT_WITH_MASK
OpenCV grabcut: how to combine GC_INIT_WITH_RECT and GC_INIT_WITH_MASK
我在c++中找不到这样的例子,所以如果有人能告诉我那就太好了!谢谢。
除了@Aurelius的回答
当您使用GC_INIT_WTH_RECT
模式时,grabCut()
函数所做的是将矩形外的所有内容设置为GC_BGD
,并将矩形内的所有内容设置为GC_PR_FGD
。因此,使用此模式将为您初始化掩码。
如果你想使用矩形和标记你自己的确定-前景/背景,然后使用模式GC_INIT_WITH_MASK
。
创建自己的掩码,一个0数组,大小与grabCut()
输入的img
相同。将矩形内的所有内容设置为GC_PR_FGD
。外面的一切都应该是GC_BGD
。然后,如果你知道某个像素是确定的前景,将其设置为GC_FGD
,如果你知道某个像素可能是背景,将其设置为GC_PR_BGD
。
GC_
值对应:
GC_BGD 0
GC_FGD 1
GC_PR_BGD 2
GC_PR_FGD 3
当我想使用矩形和普通用户输入时,我就是这样做的
虽然在文档中没有明确说明,但GC_INIT_WITH_RECT
和GC_INIT_WITH_MASK
标志是互斥的。如果两个都传递给grabCut()
,则优先选择GC_INIT_WITH_RECT
,而忽略另一个。
为了证明这一点,下面是OpenCV源代码中的相关片段:
if( mode == GC_INIT_WITH_RECT )
initMaskWithRect( mask, img.size(), rect );
else // flag == GC_INIT_WITH_MASK
checkMask( img, mask );
相关文章:
- GCC对可能有效的代码抛出init list生存期警告
- Visual C++GC接口如何启用它以及要包含哪个库
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 使用 std::ios_base::Init 正确初始化全局变量
- Pybind11: init<> with lambda
- 为什么别名声明不是有效的 init 语句(/simple-declaration)?
- 结构 init:字符**类型的标量初始值设定项两边的大括号
- 如何正确链接到CMake中的库(使用Boehm GC)?
- V8垃圾收集器回调,用于测量GC活动
- 为什么基于范围类型的大括号上循环init列表是非法的c++
- 是否可以使用"if constexpr"来声明具有不同类型和init-expr的变量
- Android Studio TextView Init C++
- Pc Lint,如何使用 init() 抑制类的 err 613(可能使用空 ponter)
- 带有定制 GLFW 二进制 /usr/bin/ld 的 Centos 7: /usr/local/lib/libglfw3.a(init.c.o):".text"部分中无法识别的重定位 (0x2a)
- 如何强制调用类的全局实例的析构函数和构造函数(以便"re-init"类实例)
- 当调用时,为什么ranges ::累积的init as std :: Move(init)
- clang tidy pro type member init resharper
- Android NDK 未定义对 'std::ios_base::Init::Init()' 的引用
- 将QT与Boehm-Demers-Weiser-GC一起使用