GrabCut - bgdModel & fgdModel 空 - 断言错误
GrabCut - bgdModel & fgdModel empty - Assertion error
我正在尝试使用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
我在这里错过了什么?
谢谢
这种错误可能发生的一种情况是,当你的图像有零的宽度或高度(但不是两者),因为这个bug: https://code.ros.org/trac/opencv/ticket/691(这似乎是OpenCV 2.1后修复)。
如果图像尺寸非零,您还应该检查ROI rect:
- 不是空的(
imageSize
的大小不是零), - 不覆盖整个图像。
GC_INIT_WITH_RECT
将给定矩形外的所有像素标记为"背景",将矩形内的所有像素标记为"可能的前景",并且断言期望在前景(或"可能的前景")和背景(或"可能的背景")列表中都有像素。
@alexisdm is right,
我的rect是rect = (0,0,img.shape[0],img.shape[1]),因为我不知道前景和背景在哪里。
解决方案不是通过将其更改为来覆盖整个图像Rect = (1,1,img.shape[0],img.shape[1]).相关文章:
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- 我收到一个断言错误,但是当我编写 cout 语句时,它会消失
- 尝试删除指向派生对象的基指针时断言错误
- Sysmalloc:使用向量的断言错误
- OpenCV CV 查找单应断言错误计数器 = > 4
- Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
- 是什么导致我的C 代码中的断言错误
- 迭代器取消引用断言错误
- boost::shared_ptr 断言错误与 boost::asio:io_service
- CDao数据库断言错误
- STL 迭代器:断言错误
- 断言错误,字符串下标超出范围
- 调试断言错误-OpenCV
- 向量push_back会导致断言错误,但列表push_back有效
- 如何在子进程中禁用断言错误对话框
- OpenCV.norm中的断言错误
- 将功能区添加到现有的非功能区 mfc 项目 - 在 VS2010 中断言错误
- 访问指向像素openCV的指针时发生断言错误
- 断言错误,即使在使用 new 初始化字符指针后也是如此
- 使用结构向量 c++ 的断言错误