opencv c++ 高斯混合模型使用

本文详细介绍了如何使用OpenCV的BackgroundSubtractorMOG2进行动态目标检测,包括参数设置和关键步骤。讲解了history、varThreshold、detectShadows等关键参数的作用,并提供了代码实例,适用于光照变化场景的背景去除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ptr<BackgroundSubtractorMOG2> bgsubtractor = createBackgroundSubtractorMOG2();

// 用于训练背景的帧数,如果不手动设置learning rate,history就被用于计算当前的learning rate,
// history越大,learning rate越低,背景更新越慢
bgsubtractor->setHistory(500);

// 方差阈值,主要用于判断前景还是背景,值越大,灵敏度越低
// 如果光照变化明显,如阳光下的水面,建议设为25,36
bgsubtractor->setVarThreshold(16);

// 是否检测有影子,开启后会增加算法复杂度
bgsubtractor->setDetectShadows(true);

// 高斯模型个数,默认5个,最多8个
bgsubtractor->setBackgroundRatio(4);

// 高斯背景模型权重和阈值,nmixtures个模型按权重重排序后,
// 只取模型权重累加值大于backgroundRatio的前几个作为背景模型
bgsubtractor->setNMixtures(5);

// 新建高斯模型的方差初始值,默认15
bgsubtractor->setVarInit(15);

// 背景更新时,用于限制高斯模型方差的最大值,默认20
bgsubtractor->setVarMax(20);

// 背景更新时,用于限制高斯模型方差的最小值,默认4
bgsubtractor->setVarMin(4);

// 方差阈值,用于已经存在的匹配的模型,如果不存在则新建一个
bgsubtractor->setVarThresholdGen(100);

代码:

Mat Quick_Demo::getframe(VideoCapture cap, float scallingFactor)//从摄像头提取画面
{
	Mat frame, output;
	//捕获当前画面
	cap >> frame;
	//resize
	resize(frame, frame, Size(), scallingFactor, scallingFactor, INTER_AREA);

	//灰度图转换
	cvtColor(frame, output, COLOR_BGR2GRAY);
	flip(output, output, 1);
	return output;
}
void Quick_Demo::gaussMOG()
{
	//高斯混合模型定义
	Ptr<BackgroundSubtractorMOG2> bgm2 = createBackgroundSubtractorMOG2();
	bgm2->setHistory(20);
	bgm2->setVarThreshold(100);
	bgm2->setDetectShadows(false);
	
	//定义捕获图像与输出图像
	Mat frame, fgmaskMOG2,output;
	char ch;
	VideoCapture cap(0);

	float scallingFactor = 0.75;

	namedWindow("高斯混合捕获", WINDOW_FREERATIO);
	while (true) {
		ch = waitKey(100);
		if (ch == 27)
			break;

		//传入处理后的捕获图像
		frame = getframe(cap,scallingFactor);

		//更新背景,这里在前面如果背景没更新,就每帧重置背景为黑。
		bgm2->apply(frame, fgmaskMOG2);

		//把捕获图像与背景图像叠加
		//frame.copyTo(output, fgmaskMOG2);

		imshow("frame", frame);
		//显示
		imshow("高斯混合捕获", fgmaskMOG2);
		
	}
	cap.release();
	destroyAllWindows();
}

参考:(33条消息) opencv:动态目标检测--BackgroundSubtractorMOG2 C++_zhaohanqq的博客-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值