Эффективное вычитание фона с помощью OpenCV
Я хочу сделать вычитание фона в видеофайле, используя метод OpenCV. Прямо сейчас я могу сделать вычитание фона, но проблема в том, что я не могу получить вывод в цветном режиме. Все выходные данные после вычитания фона поступают в режиме оттенков серого :(. Я хочу получить информацию о цвете на переднем плане, которая является результирующим выходным сигналом после вычитания фона.
Могу ли я сделать это в технике маскировки? как следующая процедура, о которой я думаю.
- Ввод ввода -
InputFrame
(RGB) - Процесс
InputFrame
- Вычтите фон, сохраните передний план в
TempFrame
(который идет в оттенках серого :() - Создать маску, используя
TempFrame
- Примените созданную маску к
InputFrame
- Получить цвет переднего плана как
OutFrame
Я поражен выполнением маскировки с использованием OpenCV. Я только начинающий в OpenCV. Пожалуйста, помогите мне преодолеть это.
Заранее спасибо.
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=
чтобы достичь цветного переднего плана, просто скопируйте изображение с помощью маски переднего плана
// image.copyTo(передний план, передний план);