GrabCut - bgdModel & fgdModel пусто - ошибка подтверждения - PullRequest
6 голосов
/ 25 сентября 2011

Я пытаюсь сегментировать изображение, используя алгоритм GrabCut в OpenCV2.1 (C ++)

Вот мой код:

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

Что мне здесь не хватает?

Спасибо

1 Ответ

8 голосов
/ 25 сентября 2011

Один из случаев, когда эта ошибка может произойти, это когда ваше изображение имеет ноль для ширины или высоты (но не для обоих) из-за этой ошибки: https://code.ros.org/trac/opencv/ticket/691 (которая, похоже, исправлена ​​после OpenCV 2.1).

Если размеры изображения не равны нулю, вам также следует проверить, что область ROI:

  • не пусто (imageSize не имеет нулевого размера) и
  • не охватывает все изображение.

GC_INIT_WITH_RECT помечает все пиксели вне заданного прямоугольника как «фон», а все пиксели внутри прямоугольника - как «вероятно, передний план», и утверждение предполагает, что пиксели есть как на переднем плане (или «вероятно, на переднем плане»), так и на фоне ( или "вероятно фон") список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...