在图像处理中,常常需要通过去除图像的背景来获得图像中的人或者其他一些物体等前景对象。
传统的算法是先拍一张背景图像,然后将之后拍摄到的图像减去这张背景图像再做一些滤波处理以取得前景对象。这种方法的好处是简单,但简单之余,一旦背景发生了变化,变化的部分就会被识别为前景,以致算法失效,因此背景一有变动则需重新拍摄背景图像,非常麻烦。
混合高斯模型去除背景法则没有这个问题,其在加入的图像中不断学习,分离出前景和背景,并不断的改善背景模型,因此能比较好的对背景和前景进行分离。这套算法OpenCV已经实现了,下面贴出代码,后面如本人自行实现,会再贴出详细的分析。
#include <opencv2/opencv.hpp>
using namespace cv;
void main()
{
cv::Mat frame;
cv::Mat back;
cv::Mat fore;
cv::Ptr<BackgroundSubtractorMOG2> bg = createBackgroundSubtractorMOG2();//第一个参数为参考历史帧数
char path[