//头文件
#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