OpenCV如何获取跟踪器数据
时间: 2023-09-14 13:08:29 浏览: 44
在OpenCV中,可以通过跟踪器对象的 `getObjects()` 函数来获取跟踪器的数据。这个函数返回一个矩形向量,其中每个矩形表示一个跟踪器所跟踪的目标。可以遍历这个向量,以获取每个目标的位置和大小信息。
以下是一个获取跟踪器数据的示例代码:
```cpp
#include <opencv2/core.hpp>
#include <opencv2/tracking.hpp>
int main()
{
cv::Mat frame = cv::imread("example.jpg");
cv::Rect2d bbox(287, 23, 86, 320); // 初始跟踪框
// 创建一个KCF跟踪器
cv::Ptr<cv::Tracker> tracker = cv::TrackerKCF::create();
// 初始化跟踪器
tracker->init(frame, bbox);
// 开始跟踪
while (true)
{
// 从视频中读取一帧
cv::Mat frame;
if (!cap.read(frame))
break;
// 更新跟踪器
bool ok = tracker->update(frame, bbox);
if (ok)
{
// 获取跟踪器数据
std::vector<cv::Rect2d> objects;
tracker->getObjects(objects);
// 遍历目标列表
for (const auto& obj : objects)
{
// 在图像中绘制目标框
cv::rectangle(frame, obj, cv::Scalar(0, 255, 0), 2, 1);
}
}
else
{
// 跟踪失败
cv::putText(frame, "Tracking failure detected", cv::Point(100, 80), cv::FONT_HERSHEY_SIMPLEX, 0.75, cv::Scalar(0, 0, 255), 2);
}
// 显示结果
cv::imshow("Tracking", frame);
// 按下ESC键退出
if (cv::waitKey(1) == 27)
break;
}
return 0;
}
```
在上面的示例代码中,我们使用了KCF跟踪器对一张图像中的目标进行跟踪,并通过 `getObjects()` 函数获取了跟踪器的数据。这个函数返回一个 `std::vector<cv::Rect2d>` 对象,其中每个矩形表示跟踪器所跟踪的一个目标。我们可以遍历这个向量,以获取每个目标的位置和大小信息,并在图像中绘制目标框。