BackgroundSubtractorMOG2 очень шумный?

0

Я использую BackgroundSubtractorMOG2 качестве кода ниже

BackgroundSubtractorMOG2 bgr;
double learningRate = 0.05;
(bgr)(img_input, img_mask, learningRate);

Но результат не очень хорош, здесь есть много пикселей переднего плана шума (рисунок ниже) Изображение 174551

Когда я использую BackgroundSubtractorMOG в качестве кода ниже

BackgroundSubtractorMOG bgr(81, 3, 0.1);
double learningRate = 0.05;
(bgr)(img_input, img_mask, learningRate);

Результат лучше, но этот метод медленнее (рисунок ниже) Изображение 174551

Я хочу использовать BackgroundSubtractorMOG2, потому что он быстрее, но результат очень шумный.

Кто-нибудь может показать мне правильный способ использования BackgroundSubtractorMOG2?

Спасибо!

Т & Т

  • 1
    Вы называете это "очень" шумно? Если вы хотите скорость + качество, попробуйте ViBe. Существует демо-приложение (где вы можете увидеть, подходит ли вам качество). Способ очень прост в реализации, но запатентован.
  • 0
    @Micka: Спасибо, я попытался использовать алгоритм Vibe, который реализован BgsLibrary, его качество хорошее, но скорость его ниже, чем у BackgroundSubtractorMOG.
Теги:
opencv

1 ответ

4

Почему вы не используете морфологическую операцию на выходе?

vector<vector<Point >> contours;
Mat kernel=getStructuringElement(MORPH_ELLIPSE,Size(5,5));
Mat kernel2=getStructuringElement(MORPH_ELLIPSE,Size(10,10));
morphologyEx(img_mask,img_mask,CV_MOP_ERODE,kernel);
morphologyEx(img_mask,img_mask,CV_MOP_DILATE,kernel2);

findContours(img_mask,contours,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE);
drawContours(img_input,contours,-1,cv::Scalar(255,255,255),2);
output=img_input.clone();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню