基于OpenCV的简单人流量统计

       学习OpenCV快一年了,最近做了一个简单的人流量统计的项目,分享给大家。

       本次人流量统计用的是纯OpenCV的技术,没有涉及深度学习的知识,如果大家深度学习做得好的话,效果会更好。

       首先介绍我的环境Windows10+OpenCV3.4.3+VS2017 

OpenCV代码实现

       首先是头文件,相关函数以及全局变量的设定。

//头文件
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

//鼠标操作,画一条红线,撞线计数
void on_MouseHandle(int event, int x, int y, int flags, void* param);
void DrawLine(Mat &img, Rect box);

Rect g_box;
bool g_DrawingBox = false;
Point p1, p2;
int Thecount = 0;
int precolor = 0;
int all = 0;

然后我们将进入主程序部分:

int main(int argc, char**)
{
	//全局变量的初始化
	g_box = Rect(-1, -1, 0, 0);
	p1 = Point(0, 0);
	p2 = Point(0, 0);
	//打开视频文件
	VideoCapture capture;
	capture.open("E:/The Program/OpenCV3.3.4/Video/manflow.mp4");
	if (!capture.isOpened()) {
		printf("could not find the video file...\n");
		return -1;
	}
	// create windows
	Mat frame;
	Mat bsmaskMOG2;
	Mat threshimg;
    //读取人形掩码
	Mat man1, man2, man3;
	man1 = imread("C:/Users/dlgker/Desktop/man1.png");
	man2 = imread("C:/Users/dlgker/Desktop/man2.png");
	man3 = imread("C:/Users/dlgker/Desktop/man3.png");
	cvtColor(man1, man1, COLOR_BGR2GRAY);//转化为灰度图像,便于后面的图形矩匹配
	cvtColor(man2, man2, COLOR_BGR2GRAY);
	cvtColor(man3, man3, COLOR_BGR2GRAY);
	vector<vector<Point>> contours;//存取轮廓的点
	vector<Vec4i> hierarchy;//存取轮廓的层级
	//Mat	bsmaskKNN;
	namedWindow("input video", CV_WINDOW_AUTOSIZE);
	//namedWindow("MOG2", CV_WINDOW_AUTOSIZE);
	//namedWindow("KNN Model", CV_WINDOW_AUTOSIZE);
	capture.rea
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值