Эффективное вычитание фона с помощью OpenCV
Я хочу сделать вычитание фона в видеофайле с помощью метода OpenCV. Прямо сейчас я могу сделать вычитание фона, но проблема в том, что я не мог получить выход в цветном режиме. Все выходные данные после вычитания фона поступают в режиме оттенков серого : (. Я хочу получить информацию о цвете на передний план, который является результирующим выходом после вычитания фона.
могу я сделать его используя маскируя метод?? примерно следующий процедура, о которой я думаю.
- Ввод --
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://code.google.com/p/derin-deli-mavi/downloads/detail?name=denemeOpenCv23.zip&can=2&q=
для достижения цветного изображения просто скопируйте изображение с помощью foreground mask
// изображения.copyTo (передний план,передний план);