OpenCV4学习笔记(79)——bgsegm背景提取模块

今天要整理的内容是关于OpenCV中contrib拓展库中的bgsegm模块,这个模块功能主要是针对于对视频流进行背景与前景的分离、提取,其中包含了多种已经实现并封装好的背景提取器。今天主要是使用bgsegm模块中不同的背景提取器来对同一个视频流进行运动前景提取,并对比不同提取器的效果。

首先,我们先回顾一下在之前的笔记《OpenCV4学习笔记(31)》中,已经整理了OpenCV基础库中的一个常用的基于自适应高斯混合背景建模(MOG2)的帧差法实现的背景提取器,我们可以使用createBackgroundSubtractorMOG2()来进行创建并使用。下面也会将这个基础库中的背景提取器与bgsegm模块中的背景提取器进行比较。

首先我们需要读取一段视频流,这里使用的是OpenCV自带的一段视频

	VideoCapture capture;
	capture.open("D:\\opencv_c++\\opencv_tutorial\\data\\images\\vtest.avi");
	if (!capture.isOpened())
	{
		cout << "can't open video" << endl;
		exit(-1);
	}

当创建了背景提取器后,在帧循环中使用apply()去进行调用

	Mat frame;
	while (capture.read(frame))
	{
		Mat fgmask;
		backgroundSubtractor->apply(frame, fgmask);
		imshow("fgmask", fgmask);
		imshow("frame", frame);

		char ch = waitKey(1);
		if (ch == 27)
		{
			break;
		}
	}

下面对bgsegm模块提供的多种背景提取器进行列举。

  1. CNT模型背景提取器
    使用auto backgroundSubtractor = bgsegm::createBackgroundSubtractorCNT()来进行创建,其提取效果在各个提取器中进行对比,运行速度很快、几乎不存在卡顿,而且效果也比较好。

  2. GMG模型背景提取器
    使用auto backgroundSubtractor = bgsegm::createBackgroundSubtractorGMG()进行创建,其运行速度较快、基本上不存在卡顿,但是效果较差,提取的前景视频流中开始有一小段为纯黑色,而且存在很多噪点。

  3. GSOC背景提取器
    使用auto backgroundSubtractor = bgsegm::createBackgroundSubtractorGSOC()进行创建,相比起其他背景提取器,GSOC背景提取器运行速度很慢,甚至是肉眼可见的卡顿,但是提取背景效果比较好。

  4. LSBP(本地SVD二进制模式)背景提取器
    使用auto backgroundSubtractor = bgsegm::createBackgroundSubtractorLSBP() 进行创建,其运行速度很慢,肉眼可见卡顿,提取效果一般,并且存在一些噪点。

  5. MOG高斯混合模型背景提取器
    使用auto backgroundSubtractor = bgsegm::createBackgroundSubtractorMOG()进行创建,运行速度一般,没有明显卡顿,但是提取效果不错。在基础库中的基于MOG2模型的背景提取器是MOG背景提取器的改进版本,相比之下MOG2运行速度更快,提取效果也不错,但是存在比较多噪点,需要通过形态学滤波去除。
    OpenCV4学习笔记(79)——bgsegm背景提取模块_第1张图片

好的那上面就给出了bgsegm模块中提供的各种背景提取器的演示效果了,我们可以根据需求来选择适合自己的一种方式来对视频流进行背景、前景的提取分割。本次笔记到此结束。

PS:本人的注释比较杂,既有自己的心得体会也有网上查阅资料时摘抄下的知识内容,所以如有雷同,纯属我向前辈学习的致敬,如果有前辈觉得我的笔记内容侵犯了您的知识产权,请和我联系,我会将涉及到的博文内容删除,谢谢!

你可能感兴趣的:(学习笔记)