码迷,mamicode.com
首页 > 其他好文 > 详细

11 帧差法获取运动

时间:2019-10-08 23:39:14      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:get   rgb   bsd   ret   pause   bre   diff   ==   ram   

帧差法

 

 

三帧差法

录频工具转gif

技术图片

 

 

技术图片

#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"

using namespace cv;

int main(int argc, char *argv[])
{
	VideoCapture videoCap(0);
	if (!videoCap.isOpened())
	{
		return -1;
	}
	double videoFPS = videoCap.get(CV_CAP_PROP_FPS);  //获取帧率
	double videoPause = 1000 / videoFPS;
	Mat framePrePre; //上上一帧
	Mat framePre; //上一帧
	Mat frameNow; //当前帧
	Mat frameDet; //运动物体
	videoCap >> framePrePre;
	videoCap >> framePre;
	cvtColor(framePrePre, framePrePre, CV_RGB2GRAY);
	cvtColor(framePre, framePre, CV_RGB2GRAY);
	int save = 0;
	while (true)
	{
		videoCap >> frameNow;
	//	if (frameNow.empty() || waitKey() == 27)
	if (frameNow.empty() )
		{
			break;
		}
		cvtColor(frameNow, frameNow, CV_RGB2GRAY);
		Mat Det1;
		Mat Det2;
		absdiff(framePrePre, framePre, Det1);  //帧差1
		absdiff(framePre, frameNow, Det2);     //帧差2
		threshold(Det1, Det1, 0, 255, CV_THRESH_OTSU);  //自适应阈值化
		threshold(Det2, Det2, 0, 255, CV_THRESH_OTSU);
		Mat element = getStructuringElement(0, Size(3, 3));  //膨胀核
		dilate(Det1, Det1, element);    //膨胀
		dilate(Det2, Det2, element);
		bitwise_and(Det1, Det2, frameDet);
		framePrePre = framePre;
		framePre = frameNow;
		imshow("Video", frameNow);
		imshow("Detection", frameDet);
		waitKey(1);
	}
	return 0;
}

  

11 帧差法获取运动

标签:get   rgb   bsd   ret   pause   bre   diff   ==   ram   

原文地址:https://www.cnblogs.com/kekeoutlook/p/11638613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!