使用opencv自带的gmm前景提取算法以及kcf算法,实现自动跟踪移动目标,效果一般般。代码如下
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
using namespace cv;
using namespace std;
int main()
{
string videp_path = "";
VideoCapture cap(0);
if (!cap.isOpened()) {
return -1;
}
Mat frame;
Mat foreground;
Mat background;
Mat fgmask;
Mat track_img;
//定义gmm前景提取模型
Ptr<BackgroundSubtractorMOG2> ptrMOG = createBackgroundSubtractorMOG2();
//定义kcf跟踪器
Ptr<TrackerKCF> tracker = TrackerKCF::create();
bool startTrack = false;
bool restartTrack = false;
bool stopTrack = false;
bool isTracking = false;
Rect2d track_box;
vector<vector<Point>> contours;
vector<Point> maxContour;
Rect2d target;
while (cap.read(frame))
{
frame.copyTo(track_img);
ptrMOG->apply(frame, fgmask, -1);
foreground = Scalar::all(0);
//对fgmask进行处理
Mat el