day35:差值法检测移动物体

视频是大量具有时序关系图像的集合, 对视频的处理方式与对图像的处理方式相同,另外可以结合时序关系挖掘更深层信息。例如判断拍摄视频时相机是否移动、识别场景 中是否存在物体移动、
恢复场景中物体的三维信息等.本章中将重点介绍如何检测视频中移动 的物体,并对移动物体 进行
跟踪。 主要的方法有差值法、均值迁移法和光流法。

 

void visionagin:: Myabsdiff()
{
	VideoCapture capture("C:\\Users\\86176\\Downloads\\visionimage\\vtest.avi");
	if (!capture.isOpened())
	{
		cout << "视频打开失败!" << endl;
	}
	int fps = capture.get(CAP_PROP_FPS);
	int Height = capture.get(CAP_PROP_FRAME_HEIGHT);
	int Width = capture.get(CAP_PROP_FRAME_WIDTH);
	int NumOfFrame = capture.get(CAP_PROP_FRAME_COUNT);
	//读取视频中的第一帧图像作为前一帧
	Mat preframe, pregray;
	capture.read(preframe);
	cvtColor(preframe, pregray, COLOR_BGR2GRAY);
	//高斯滤波
	GaussianBlur(pregray, pregray, Size(3, 3),15);
	//生成形态学操作矩形模板
	Mat k = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
	Mat frame, gray, binary;
	while (true)
	{
		if (!capture.read(frame))
		{
			break;//读取完毕结束
		}
		//灰度化当前帧图像
		cvtColor(frame, gray, COLOR_BGR2GRAY);
		GaussianBlur(gray, gray, Size(3, 3), 15);
		//计算当前帧与前一帧差值
		absdiff(gray, pregray, binary);
		//对结果二值化并进行开运算
		threshold(binary, binary, 10, 255, THRESH_BINARY);
		morphologyEx(binary, binary, MORPH_OPEN, k);
		//显示处理结果
		imshow("input", frame);
		imshow("result", binary);
		//将当前帧变成前一帧,如果注释掉下一行代码,那么程序章示固定背景的差值法
		gray.copyTo(pregray);
		int c = waitKey(50);
		if (27 == c)
		{
			break;
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值