开发者问题收集

Javascript opencv (opencv.js) grabcut GC_INIT_WITH_MASK 问题示例?

2019-09-16
469

我尝试在 opencv.js 上运行 grabcut,并将 grabcut 模式设置为 GC_INIT_WITH_MASK 。但没有得到我需要的结果。我得到的结果与使用 GC_INIT_WITH_RECT 的 grabcut 模式得到的结果相同。

在线上没有任何使用 GC_INIT_WITH_MASK 作为模式调用 opencv.js cv.grabcut 的示例。

因此,我查看了官方 opencv 文档,它提供了一个 python 示例。

其中,

cv.grabCut(img,mask,None,bgdModel,fgdModel,5,cv.GC_INIT_WITH_MASK)

None (相当于 javascript 中的 null)作为第 3 个参数,它需要一个矩形对象,当模式为 INIT_WITH_MASK 时,在这里不传递矩形是有意义的。

但是当我在 javascript 中调用 cv.grabcut 函数时,在那里使用 null。它给出了一个错误,

TypeError: Cannot use 'in' operator to search for 'x' in null

当我传递一个矩形对象时它会运行。但给出的结果与使用 GC_INIT_WITH_RECT 模式相同。

如何使用 INIT_WITH_MASK 模式正确运行它?

2个回答

我遇到了类似的问题,并尝试在没有任何参数的情况下初始化矩形并将其提供给 GrabCut

 let rect = new cv.Rect();
 cv.grabCut(src, mask, rect, bgdModel, fgdModel, 1, cv.GC_INIT_WITH_MASK);

并且它起作用了(我可以看到与我自己的蒙版的区别)。起初,我也没有看到任何区别,但它表明我使用了与之前相同的蒙版,并使用了 GC_INIT_WITH_RECT 选项。

祝你有美好的一天

smfx
2020-05-29
let rect = new cv.Rect(100, 100, 400, 400);
cv.grabCut(src, mask, rect, bgdModel, fgdModel, 1, cv.GC_INIT_WITH_RECT);
Huy Nguyễn
2024-01-10