Вычитание фона с использованием OpenCV MOG из прямой трансляции с камеры

Я изучаю OpenCV и мне очень весело, но теперь я застрял с проблемой, когда пытаюсь использовать алгоритм вычитания фона, чтобы обнаружить любые изменения.

Я последовал за этот учебник, и мне удалось заставить его работать, чтобы обнаружить изменения в видеофайле (AVI).

Проблема, с которой я сталкиваюсь сейчас, состоит в том, что она имеет тенденцию неправильно вычитать фоновый шум и другие небольшие изменения и вместо этого заполнять весь экран в значительной степени белым.

Вот моя реализация алгоритма MOG на прямой трансляции с камеры, но важная часть такова:

    VideoCapture cap;
if (argc > 1)
cap.open(argv[1]);
else
cap.open(0);
cap.set(CV_CAP_PROP_FOURCC ,CV_FOURCC('D', 'I', 'V', '3') );
........
Mat frame, fgMaskMOG;

Ptr<BackgroundSubtractor> pMOG = new BackgroundSubtractorMOG();
for (;;)
{
if(!cap.read(frame)) {
cerr << "Unable to read next frame." << endl;
continue;
}
// process the image to obtain a mask image.
pMOG->operator()(frame, fgMaskMOG);

std::string time = getDateTime();
cv::rectangle(frame,cv::Rect(0,cap.get(CV_CAP_PROP_FRAME_HEIGHT)-25,290,20),cv::Scalar(255,255,255),-1);
cv::putText(frame,time,cv::Point(0,cap.get(CV_CAP_PROP_FRAME_HEIGHT)-5),1,1.5,cv::Scalar(0,0,0),2);
........
// show image.
imshow("Image", frame);
imshow("Debug",fgMaskMOG);
int c = waitKey(30);
if (c == 'q' || c == 'Q' || (c & 255) == 27)
break;
}

Эта реализация прекрасно работает для видеофайла, как вы можете видеть:
описание изображения http://answers.opencv.org//upfiles/14072745951051408.png
описание изображения http://answers.opencv.org//upfiles/14072746351663485.png

Но это результат, когда я пытаюсь использовать MOG для прямой трансляции с камеры:
описание изображения http://answers.opencv.org//upfiles/14072748868325599.png
описание изображения http://answers.opencv.org//upfiles/14072749039556545.png

(РЕДАКТИРОВАТЬ:

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: Мои ожидания были такими же, как у видеофайла (см. Рисунки 1 и 2 выше).
ФАКТИЧЕСКИЙ РЕЗУЛЬТАТ: Фактический результат был далек от моего ожидаемого результата, было создано много шума (т.е. не отфильтровано), когда кто-то помещал что-то перед камерой, это было бы черным вместо белого (обратный результат от видеофайла).

— — — — СИСТЕМНЫЕ ДЕТАЛИ — — — —
ОПЕРАЦИОННЫЕ СИСТЕМЫ: Windows x64bit
ПАМЯТЬ В НАЛИЧИИ: 3890 МБ
ВЕБКАМЕРА: Я использую встроенную веб-камеру на моем ноутбуке Satellite C660 TOSHIBA.
Составитель:
описание изображения http://answers.opencv.org//upfiles/14074106918566591.pngMicrosoft Visual Studio Express 2012 для рабочего стола Windows
описание изображения http://answers.opencv.org//upfiles/14074106918566591.pngВерсия 11.0.61030.00 Обновление 4
описание изображения http://answers.opencv.org//upfiles/14074106918566591.pngMicrosoft .NET Framework
описание изображения http://answers.opencv.org//upfiles/14074106918566591.pngВерсия 4.5.50948
Версия OpenCV: OpenCV V. 2.4.9, построен для Windows, загружен с SourceForge.
ВЫХОД ИЗ cv::getBuildInformation(): OpenCV_BUILD.txt
Таблица свойств проекта Microsoft Visual Studio: Таблица свойств проекта OpenCV
)

0

Решение

Задача ещё не решена.

Другие решения