Эффективное вычитание фона с помощью OpenCV

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

могу я сделать его используя маскируя метод?? примерно следующий процедура, о которой я думаю.

  1. Ввод -- InputFrame (RGB)

2 ответов


хорошо, я не понимаю, как TempFrame (ваш передний план) может быть оттенками серого, если вы используете вычитание фона. Вы должны использовать особый алгоритм. Но предполагая, что TempFrame-это оттенки серого, тогда вы сделаете следующее:

cv::Mat mask = tempFrame > 0.5;

cv::Mat outFrame;
capturedFrame.copyTo(outFrame, mask);

это код OpenCV 2.0 выше. Число 0.5-это порог, вам нужно установить его на что-то подходящее. Если вы не используете изображения с плавающей запятой, вы, вероятно, установите его в 128 или что-то в этом роде. Это то же самое в OpenCV 1.1 код:

CvMat* mask = cvCreateMat(tempFrame.rows, tempFrame.cols, CV_8UC1);
cvCmpS(tempFrame, 0.5, mask);

CvMat* outFrame = cvCreateMat(capturedFrame.rows, capturedFrames.cols, CV_32FC3);
cvCopy(capturedFrame, outFrame, mask);

http://vimeo.com/27477093

код здесь

http://code.google.com/p/derin-deli-mavi/downloads/detail?name=denemeOpenCv23.zip&can=2&q=

для достижения цветного изображения просто скопируйте изображение с помощью foreground mask

// изображения.copyTo (передний план,передний план);