opencv实现物体检测追踪c++代码
时间: 2023-09-24 16:14:00 浏览: 270
Opencv实现物体识别和追踪
4星 · 用户满意度95%
以下是一个基于OpenCV实现物体检测追踪的C++代码示例:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 加载视频
VideoCapture cap("video.mp4");
if (!cap.isOpened())
{
cout << "Could not open the video file" << endl;
return -1;
}
// 创建对象检测器
CascadeClassifier detector;
if (!detector.load("haarcascade_frontalface_default.xml"))
{
cout << "Could not load the detector" << endl;
return -1;
}
// 创建跟踪器
Ptr<Tracker> tracker = TrackerKCF::create();
// 初始化目标位置
Rect2d bbox;
Mat frame;
cap >> frame;
cvtColor(frame, frame, COLOR_BGR2GRAY);
vector<Rect> faces;
detector.detectMultiScale(frame, faces, 1.3, 5);
if (faces.size() > 0)
{
bbox = faces[0];
tracker->init(frame, bbox);
}
// 循环处理每一帧
while (cap.read(frame))
{
// 检测目标并更新bbox
if (bbox.area() == 0)
{
cvtColor(frame, frame, COLOR_BGR2GRAY);
detector.detectMultiScale(frame, faces, 1.3, 5);
if (faces.size() > 0)
{
bbox = faces[0];
tracker->init(frame, bbox);
}
}
else
{
bool ok = tracker->update(frame, bbox);
if (ok)
{
rectangle(frame, bbox, Scalar(0, 255, 0), 2, 1);
}
else
{
bbox = Rect2d();
}
}
// 显示结果
imshow("frame", frame);
// 按下q键退出循环
if (waitKey(1) == 'q')
{
break;
}
}
// 释放资源
cap.release();
destroyAllWindows();
return 0;
}
```
该代码使用了Haar Cascades检测人脸,并使用KCF跟踪器追踪人脸。在每一帧中,首先检测目标并初始化bbox,然后使用跟踪器更新bbox并绘制矩形框。最后显示结果并等待用户按下q键退出循环。你可以根据需要调整检测器和跟踪器,并对算法参数进行调整。
阅读全文