May*_*ank 6 c++ opencv image-processing
我在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);
Run Code Online (Sandbox Code Playgroud)
不幸的是我收到此运行时错误:
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
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
谢谢
可能发生错误的一种情况是,由于此错误,您的图像的宽度或高度(但不是两者)都为零:https://code.ros.org/trac/opencv/ticket/691(看起来似乎在OpenCV之后修复2.1).
如果图像尺寸不为零,您还应该检查ROI rect:
imageSize没有零大小)和GC_INIT_WITH_RECT 将给定rect之外的所有像素标记为"background",将rect内的所有像素标记为"可能为前景",并且断言期望前景(或"可能是前景")和背景(或"可能是背景")中都有像素名单.