我正在尝试在 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/