c++ - GrabCut - bgdModel 和 fgdModel 为空 - 断言错误

标签 c++ image-processing opencv

我正在尝试在 OpenCV2.1 (C++) 中使用 GrabCut 算法进行图像分割

这是我的代码:

Mat rgbWorkImage = imread(argv[1]);
Mat mask;
mask = Scalar(0);
Mat bgdModel, fgdModel;
Rect rect = Rect(Point(0,0), imageSize);
grabCut(rgbWorkImage, mask, rect, bgdModel, fgdModel, 0, GC_INIT_WITH_RECT);
grabCut(rgbWorkImage, mask, rect, bgdModel, fgdModel, 2, GC_EVAL);

不幸的是,我遇到了这个运行时错误:

OpenCV Error: Assertion failed (!bgdSamples.empty() && !fgdSamples.empty()) in initGMMs, file /build/buildd/opencv-2.1.0/src/cv/cvgrabcut.cpp, line 368
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.1.0/src/cv/cvgrabcut.cpp:368: error: (-215) !bgdSamples.empty() && !fgdSamples.empty() in function initGMMs

我在这里错过了什么?

谢谢

最佳答案

可能发生该错误的一种情况是,由于此错误,您的图像的宽度或高度为零(但不是两者都为零):https://code.ros.org/trac/opencv/ticket/691 (这似乎在 OpenCV 2.1 之后得到修复)。

如果图像尺寸不为零,您还应该检查 ROI 矩形:

  • 不为空(imageSize 的大小不为零)并且
  • 没有覆盖整个图像。

GC_INIT_WITH_RECT 将给定矩形外的所有像素标记为“背景”,并将矩形内的所有像素标记为“可能前景”,并且断言期望前景(或“可能前景”)中都有像素") 和背景(或“可能是背景”)列表。

关于c++ - GrabCut - bgdModel 和 fgdModel 为空 - 断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546083/

相关文章:

c++ - std::forward 模板和非模板函数中的测试

c++ - 将 wchar_t 转换为 char

matlab - 机器学习 - 训练步骤

OpenCV Ubuntu 安装错误

opencv - 图像拼接管道中的图像大小调整

java - 安卓 JNI OutOfMemoryError

c++ - 显示 wxGrid 编辑器时如何捕获 KeyEvents

c++ - 现代 C++ 是否允许双/嵌套可变参数模板扩展?

python - 创建一个可变长度的颜色查找表

linux - 可以检测眼睛位置的面部识别软件