iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python怎么使用OpenCV实现多目标跟踪
  • 416
分享到

python怎么使用OpenCV实现多目标跟踪

2023-06-30 11:06:58 416人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python怎么使用OpenCV实现多目标跟踪”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么使用OpenCV实现多目标跟踪”文章能帮助大家解决问题。1 背景介绍计算

这篇文章主要介绍“python怎么使用OpenCV实现多目标跟踪”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么使用OpenCV实现多目标跟踪”文章能帮助大家解决问题。

1 背景介绍

计算机视觉和机器学习的大多数初学者都学习对象检测。如果您是初学者,您可能会想到为什么我们需要对象跟踪。我们不能只检测每一帧中的物体吗?

让我们探讨一下跟踪有用的几个原因:

  • 首先,当在视频帧中检测到多个对象(比如人)时,跟踪有助于跨帧确定对象的身份。

  • 其次,在某些情况下,目标检测可能会失败,但仍可能跟踪对象,因为跟踪会考虑前一帧中对象的位置和外观。

  • 第三,一些跟踪算法非常快,因为它们进行本地搜索而不是全局搜索。因此,我们可以通过每第n帧执行目标检测并在中间帧中跟踪对象来为我们的系统获得非常高的性能。

那么,为什么不在第一次检测后无限期地跟踪对象呢?跟踪算法有时可能会丢失其正在跟踪的对象。例如,当对象的运动太大时,跟踪算法可能无法跟上。通常会在目标跟踪一段时间后再次目标检测。

在本教程中,我们将只关注跟踪部分。我们要跟踪的对象将通过指定它们周围的边界框来获取。

2 基于MultiTracker的多目标跟踪

OpenCV中的多目标跟踪器MultiTracker类提供了多目标跟踪的实现。但是这只是一个初步的实现,因为它只处理跟踪对象,而不对被跟踪对象进行任何优化

2.1 创建单个对象跟踪器

多对象跟踪器只是单个对象跟踪器的集合。我们首先定义一个将跟踪器类型作为输入并创建跟踪器对象的函数。

OpenCV有8种不同的跟踪器类型:BOOSTING,MIL,KCF,TLD,MEDIANFLOW,GoTURN,MOSSE,CSRT。本文不使用GOTURN跟踪器。一般我们先给定跟踪器类的名称,再返回单跟踪器对象,然后建立多跟踪器类。

C++代码:

vector<string> trackerTypes = {"BOOSTING", "MIL", "KCF", "TLD", "MEDIANFLOW", "GOTURN", "MOSSE", "CSRT"};Ptr<Tracker> createTrackerByName(string trackerType){    Ptr<Tracker> tracker;    if (trackerType == trackerTypes[0])        tracker = TrackerBoosting::create();    else if (trackerType == trackerTypes[1])        tracker = TrackerMIL::create();    else if (trackerType == trackerTypes[2])        tracker = TrackerKCF::create();    else if (trackerType == trackerTypes[3])        tracker = TrackerTLD::create();    else if (trackerType == trackerTypes[4])        tracker = TrackerMedianFlow::create();    else if (trackerType == trackerTypes[5])        tracker = TrackerGOTURN::create();    else if (trackerType == trackerTypes[6])        tracker = TrackerMOSSE::create();    else if (trackerType == trackerTypes[7])        tracker = TrackerCSRT::create();    else    {        cout << "Incorrect tracker name" << endl;        cout << "Available trackers are: " << endl;        for (vector<string>::iterator it = trackerTypes.begin(); it != trackerTypes.end(); ++it)        {            std::cout << " " << *it << endl;        }    }    return tracker;}

python代码:

from __future__ import print_functionimport sysimport cv2from random import randinttrackerTypes = ['BOOSTING', 'MIL', 'KCF','TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']def createTrackerByName(trackerType):  # Create a tracker based on tracker name  if trackerType == trackerTypes[0]:    tracker = cv2.TrackerBoosting_create()  elif trackerType == trackerTypes[1]:    tracker = cv2.TrackerMIL_create()  elif trackerType == trackerTypes[2]:    tracker = cv2.TrackerKCF_create()  elif trackerType == trackerTypes[3]:    tracker = cv2.TrackerTLD_create()  elif trackerType == trackerTypes[4]:    tracker = cv2.TrackerMedianFlow_create()  elif trackerType == trackerTypes[5]:    tracker = cv2.TrackerGOTURN_create()  elif trackerType == trackerTypes[6]:    tracker = cv2.TrackerMOSSE_create()  elif trackerType == trackerTypes[7]:    tracker = cv2.TrackerCSRT_create()  else:    tracker = None    print('Incorrect tracker name')    print('Available trackers are:')    for t in trackerTypes:      print(t)  return tracker

2.2 读取视频的第一帧

多对象跟踪器需要两个输入即一个视频帧和我们想要跟踪的所有对象的位置(边界框)。

给定此信息,跟踪器在所有后续帧中跟踪这些指定对象的位置。在下面的代码中,我们首先使用VideoCapture类加载视频并读取第一帧。稍后将使用它来初始化MultiTracker。

C++代码:

    // Set tracker type. Change this to try different trackers. 选择追踪器类型    string trackerType = trackerTypes[6];    // set default values for tracking algorithm and video 视频读取    string videoPath = "video/run.mp4";    // Initialize MultiTracker with tracking algo 边界框    vector<Rect> bboxes;    // create a video capture object to read videos 读视频    cv::VideoCapture cap(videoPath);    Mat frame;    // quit if unable to read video file    if (!cap.isOpened())    {        cout << "Error opening video file " << videoPath << endl;        return -1;    }    // read first frame 读第一帧    cap >> frame;

python代码:

# Set video to loadvideoPath = "video/run.mp4"# Create a video capture object to read videoscap = cv2.VideoCapture(videoPath)# Read first framesuccess, frame = cap.read()# quit if unable to read the video fileif not success:  print('Failed to read video')  sys.exit(1)

2.3 在第一帧中确定我们跟踪的对象

接下来,我们需要在第一帧中找到我们想要跟踪的对象。OpenCV提供了一个名为selectROIs的函数,它弹出一个GUI来选择边界框(也称为感兴趣区域(ROI))。在c++版本中可以通过selectROIs允许您获取多个边界框,但在Python版本中,只能通过selectROI获得一个边界框。因此,在Python版本中,我们需要一个循环来获取多个边界框。对于每个对象,我们还选择随机颜色来显示边界框。selectROI函数步骤为先在图像上画框,然后按ENTER确定完成画框画下一个框。按ESC退出画框开始执行程序

C++代码:

// Get bounding boxes for first frame// selectROI's default behaviour is to draw box starting from the center// when fromCenter is set to false, you can draw box starting from top left cornerbool showCrosshair = true;bool fromCenter = false;cout &lt;&lt; "\n==========================================================\n";cout &lt;&lt; "OpenCV says press c to cancel objects selection process" &lt;&lt; endl;cout &lt;&lt; "It doesn't work. Press Escape to exit selection process" &lt;&lt; endl;cout &lt;&lt; "\n==========================================================\n";cv::selectROIs("MultiTracker", frame, bboxes, showCrosshair, fromCenter);// quit if there are no objects to trackif(bboxes.size() &lt; 1)  return 0;vector&lt;Scalar&gt; colors;getRandomColors(colors, bboxes.size());
// Fill the vector with random colorsvoid getRandomColors(vector<Scalar>& colors, int numColors){  RNG rng(0);  for(int i=0; i < numColors; i++)    colors.push_back(Scalar(rng.unifORM(0,255), rng.uniform(0, 255), rng.uniform(0, 255)));}

python代码:

## Select boxesbboxes = []colors = []# OpenCV's selectROI function doesn't work for selecting multiple objects in Python# So we will call this function in a loop till we are done selecting all objectswhile True:  # draw bounding boxes over objects  # selectROI's default behaviour is to draw box starting from the center  # when fromCenter is set to false, you can draw box starting from top left corner  bbox = cv2.selectROI('MultiTracker', frame)  bboxes.append(bbox)  colors.append((randint(0, 255), randint(0, 255), randint(0, 255)))  print("Press q to quit selecting boxes and start tracking")  print("Press any other key to select next object")  k = cv2.waiTKEy(0) &amp; 0xFF  if (k == 113):  # q is pressed    breakprint('Selected bounding boxes {}'.format(bboxes))

2.4 初始化MultiTrackerer

到目前为止,我们已经读取了第一帧并获得了对象周围的边界框。这是我们初始化多对象跟踪器所需的所有信息。我们首先创建一个MultiTracker对象,并添加你要跟踪目标数的单个对象跟踪器。在此示例中,我们使用CSRT单个对象跟踪器,但您可以通过将下面的trackerType变量更改为本文开头提到的8个跟踪器时间之一来尝试其他跟踪器类型。该CSRT跟踪器是不是最快的,但它产生在我们尝试很多情况下,最好的结果。

您也可以使用包含在同一MultiTracker中的不同跟踪器,但当然,它没有多大意义。能用的不多。CSRT精度最高,KCF速度精度综合最好,MOSSE速度最快。

MultiTracker类只是这些单个对象跟踪器的包装器。正如我们在上一篇文章中所知道的那样,使用第一帧和边界框初始化单个对象跟踪器,该边界框指示我们想要跟踪的对象的位置。MultiTracker将此信息传递给它内部包装的单个目标跟踪器。

C++代码:

    // Create multitracker 创建多目标跟踪类    Ptr&lt;MultiTracker&gt; multiTracker = cv::MultiTracker::create();    // initialize multitracker 初始化    for (int i = 0; i &lt; bboxes.size(); i++)    {        multiTracker-&gt;add(createTrackerByName(trackerType), frame, Rect2d(bboxes[i]));    }

python代码:

# Specify the tracker typetrackerType = "CSRT"# Create MultiTracker objectmultiTracker = cv2.MultiTracker_create()# Initialize MultiTrackerfor bbox in bboxes:  multiTracker.add(createTrackerByName(trackerType), frame, bbox)

2.5 更新MultiTracker和显示结果

最后,我们的MultiTracker准备就绪,我们可以在新的帧中跟踪多个对象。我们使用MultiTracker类的update方法在新帧中定位对象。每个被跟踪对象的每个边界框都使用不同的颜色绘制。

Update函数会返回true和false。update如果跟踪失败会返回false,C++代码加了判断,Python没有加。但是要注意的是update函数哪怕返回了false,也会继续更新函数,给出边界框。所以返回false,建议停止追踪。

C++代码:

    while (cap.isOpened())    {        // get frame from the video 逐帧处理        cap >> frame;        // stop the program if reached end of video        if (frame.empty())        {            break;        }        //update the tracking result with new frame 更新每一帧        bool ok = multiTracker->update(frame);        if (ok == true)        {            cout << "Tracking success" << endl;        }        else        {            cout << "Tracking failure" << endl;        }        // draw tracked objects 画框        for (unsigned i = 0; i < multiTracker->getObjects().size(); i++)        {            rectangle(frame, multiTracker->getObjects()[i], colors[i], 2, 1);        }        // show frame        imshow("MultiTracker", frame);        // quit on x button        if (waitKey(1) == 27)        {            break;        }    }

python代码:

# Process video and track objectswhile cap.isOpened():  success, frame = cap.read()  if not success:    break  # get updated location of objects in subsequent frames  success, boxes = multiTracker.update(frame)  # draw tracked objects  for i, newbox in enumerate(boxes):    p1 = (int(newbox[0]), int(newbox[1]))    p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))    cv2.rectangle(frame, p1, p2, colors[i], 2, 1)  # show frame  cv2.imshow('MultiTracker', frame)  # quit on ESC button  if cv2.waitKey(1) &amp; 0xFF == 27:  # Esc pressed    break

3 结果和代码

就结果而言,多目标跟踪就是生成多个单目标跟踪器,每个单目标跟踪器跟踪一个对象。如果你想和目标检测结合,其中的对象框如果要自己设定,push一个Rect对象就行了。

//自己设定对象的检测框
//x,y,width,height
//bboxes.push_back(Rect(388, 155, 30, 40));
//bboxes.push_back(Rect(492, 205, 50, 80));
 

总体来说精度和单目标跟踪器差不多,所耗时间差不多5到7倍,不同算法不同。

完整代码如下:

C++:

// Opencv_MultiTracker.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iOStream>#include <opencv2/opencv.hpp>#include <opencv2/tracking.hpp>using namespace cv;using namespace std;vector<string> trackerTypes = {"BOOSTING", "MIL", "KCF", "TLD", "MEDIANFLOW", "GOTURN", "MOSSE", "CSRT"};Ptr<Tracker> createTrackerByName(string trackerType){    Ptr<Tracker> tracker;    if (trackerType == trackerTypes[0])        tracker = TrackerBoosting::create();    else if (trackerType == trackerTypes[1])        tracker = TrackerMIL::create();    else if (trackerType == trackerTypes[2])        tracker = TrackerKCF::create();    else if (trackerType == trackerTypes[3])        tracker = TrackerTLD::create();    else if (trackerType == trackerTypes[4])        tracker = TrackerMedianFlow::create();    else if (trackerType == trackerTypes[5])        tracker = TrackerGOTURN::create();    else if (trackerType == trackerTypes[6])        tracker = TrackerMOSSE::create();    else if (trackerType == trackerTypes[7])        tracker = TrackerCSRT::create();    else    {        cout << "Incorrect tracker name" << endl;        cout << "Available trackers are: " << endl;        for (vector<string>::iterator it = trackerTypes.begin(); it != trackerTypes.end(); ++it)        {            std::cout << " " << *it << endl;        }    }    return tracker;}void getRandomColors(vector<Scalar> &colors, int numColors){    RNG rng(0);    for (int i = 0; i < numColors; i++)    {        colors.push_back(Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)));    }}int main(int arGC, char *argv[]){    // Set tracker type. Change this to try different trackers. 选择追踪器类型    string trackerType = trackerTypes[7];    // set default values for tracking algorithm and video 视频读取    string videoPath = "video/run.mp4";    // Initialize MultiTracker with tracking algo 边界框    vector<Rect> bboxes;    // create a video capture object to read videos 读视频    cv::VideoCapture cap(videoPath);    Mat frame;    // quit if unable to read video file    if (!cap.isOpened())    {        cout << "Error opening video file " << videoPath << endl;        return -1;    }    // read first frame 读第一帧    cap >> frame;    // draw bounding boxes over objects 在第一帧内确定对象框        cout << "\n==========================================================\n";    cout << "OpenCV says press c to cancel objects selection process" << endl;    cout << "It doesn't work. Press Esc to exit selection process" << endl;    cout << "\n==========================================================\n";    cv::selectROIs("MultiTracker", frame, bboxes, false);    //自己设定对象的检测框    //x,y,width,height    //bboxes.push_back(Rect(388, 155, 30, 40));    //bboxes.push_back(Rect(492, 205, 50, 80));    // quit if there are no objects to track 如果没有选择对象    if (bboxes.size() < 1)    {        return 0;    }    vector<Scalar> colors;    //给各个框涂色    getRandomColors(colors, bboxes.size());    // Create multitracker 创建多目标跟踪类    Ptr<MultiTracker> multiTracker = cv::MultiTracker::create();    // initialize multitracker 初始化    for (int i = 0; i < bboxes.size(); i++)    {        multiTracker->add(createTrackerByName(trackerType), frame, Rect2d(bboxes[i]));    }    // process video and track objects 开始处理图像    cout << "\n==========================================================\n";    cout << "Started tracking, press ESC to quit." << endl;    while (cap.isOpened())    {        // get frame from the video 逐帧处理        cap >> frame;        // stop the program if reached end of video        if (frame.empty())        {            break;        }        //update the tracking result with new frame 更新每一帧        bool ok = multiTracker->update(frame);        if (ok == true)        {            cout << "Tracking success" << endl;        }        else        {            cout << "Tracking failure" << endl;        }        // draw tracked objects 画框        for (unsigned i = 0; i < multiTracker->getObjects().size(); i++)        {            rectangle(frame, multiTracker->getObjects()[i], colors[i], 2, 1);        }        // show frame        imshow("MultiTracker", frame);        // quit on x button        if (waitKey(1) == 27)        {            break;        }    }    waitKey(0);    return 0;}

Python:

from __future__ import print_functionimport sysimport cv2from random import randinttrackerTypes = ['BOOSTING', 'MIL', 'KCF','TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']def createTrackerByName(trackerType):  # Create a tracker based on tracker name  if trackerType == trackerTypes[0]:    tracker = cv2.TrackerBoosting_create()  elif trackerType == trackerTypes[1]:    tracker = cv2.TrackerMIL_create()  elif trackerType == trackerTypes[2]:    tracker = cv2.TrackerKCF_create()  elif trackerType == trackerTypes[3]:    tracker = cv2.TrackerTLD_create()  elif trackerType == trackerTypes[4]:    tracker = cv2.TrackerMedianFlow_create()  elif trackerType == trackerTypes[5]:    tracker = cv2.TrackerGOTURN_create()  elif trackerType == trackerTypes[6]:    tracker = cv2.TrackerMOSSE_create()  elif trackerType == trackerTypes[7]:    tracker = cv2.TrackerCSRT_create()  else:    tracker = None    print('Incorrect tracker name')    print('Available trackers are:')    for t in trackerTypes:      print(t)  return trackerif __name__ == '__main__':  print("Default tracking algoritm is CSRT \n"        "Available tracking algorithms are:\n")  for t in trackerTypes:      print(t)  trackerType = "CSRT"  # Set video to load  videoPath = "video/run.mp4"  # Create a video capture object to read videos  cap = cv2.VideoCapture(videoPath)  # Read first frame  success, frame = cap.read()  # quit if unable to read the video file  if not success:    print('Failed to read video')    sys.exit(1)  ## Select boxes  bboxes = []  colors = []  # OpenCV's selectROI function doesn't work for selecting multiple objects in Python  # So we will call this function in a loop till we are done selecting all objects  while True:    # draw bounding boxes over objects    # selectROI's default behaviour is to draw box starting from the center    # when fromCenter is set to false, you can draw box starting from top left corner    bbox = cv2.selectROI('MultiTracker', frame)    bboxes.append(bbox)    colors.append((randint(64, 255), randint(64, 255), randint(64, 255)))    print("Press q to quit selecting boxes and start tracking")    print("Press any other key to select next object")    k = cv2.waitKey(0) &amp; 0xFF    if (k == 113):  # q is pressed      break  print('Selected bounding boxes {}'.format(bboxes))  ## Initialize MultiTracker  # There are two ways you can initialize multitracker  # 1. tracker = cv2.MultiTracker("CSRT")  # All the trackers added to this multitracker  # will use CSRT algorithm as default  # 2. tracker = cv2.MultiTracker()  # No default algorithm specified  # Initialize MultiTracker with tracking algo  # Specify tracker type  # Create MultiTracker object  multiTracker = cv2.MultiTracker_create()  # Initialize MultiTracker  for bbox in bboxes:    multiTracker.add(createTrackerByName(trackerType), frame, bbox)  # Process video and track objects  while cap.isOpened():    success, frame = cap.read()    if not success:      break    # get updated location of objects in subsequent frames    success, boxes = multiTracker.update(frame)    # draw tracked objects    for i, newbox in enumerate(boxes):      p1 = (int(newbox[0]), int(newbox[1]))      p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))      cv2.rectangle(frame, p1, p2, colors[i], 2, 1)    # show frame    cv2.imshow('MultiTracker', frame)    # quit on ESC button    if cv2.waitKey(1) &amp; 0xFF == 27:  # Esc pressed      break

关于“python怎么使用OpenCV实现多目标跟踪”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网Python频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: python怎么使用OpenCV实现多目标跟踪

本文链接: https://www.lsjlt.com/news/328482.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python使用OpenCV实现多目标跟踪
    目录1 背景介绍2 基于MultiTracker的多目标跟踪2.1 创建单个对象跟踪器2.2 读取视频的第一帧2.3 在第一帧中确定我们跟踪的对象2.4 初始化MultiTracke...
    99+
    2024-04-02
  • python怎么使用OpenCV实现多目标跟踪
    这篇文章主要介绍“python怎么使用OpenCV实现多目标跟踪”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python怎么使用OpenCV实现多目标跟踪”文章能帮助大家解决问题。1 背景介绍计算...
    99+
    2023-06-30
  • python+opencv实现目标跟踪
    python-opencv3.0新增了一些比较有用的追踪器算法,这里根据官网示例写了一个追踪器类 程序只能运行在安装有opencv3.0以上版本和对应的contrib模块的python解释器   #encoding=utf-8 imp...
    99+
    2023-01-31
    目标 python opencv
  • python+opencv实现目标跟踪过程
    目录python opencv实现目标跟踪这里根据官网示例写了一个追踪器类python opencv实现目标跟踪 python-opencv3.0新增了一些比较有用的追踪器算法 这里...
    99+
    2024-04-02
  • Python OpenCV如何使用dlib进行多目标跟踪
    这篇文章主要讲解了“Python OpenCV如何使用dlib进行多目标跟踪”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python OpenCV如何使用dlib进行多...
    99+
    2023-06-29
  • python实时目标跟踪怎么实现
    这篇“python实时目标跟踪怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python实时目标跟踪怎么实现”文章吧...
    99+
    2023-07-05
  • Yolov8的多目标跟踪实现
    Yolov8_tracking 2023年2月,Yolov5发展到yolov8,这世界变得真快哦。Yolov8由ultralytics公司发布,yolov6-美团,yolov7-Alexey Boch...
    99+
    2023-09-07
    YOLO python 开发语言
  • Python使用OPENCV的目标跟踪算法实现自动视频标注效果
    先上效果  1.首先,要使用opencv的目标跟踪算法,必须要有opencv环境  使用:opencv==4.4.0 和 opencv-contri...
    99+
    2024-04-02
  • 基于OpenCV目标跟踪实现人员计数器
    目录1.了解对象检测与对象跟踪2.结合对象检测和对象跟踪3.项目结构4.结合对象跟踪算法5.创建可追踪对象6.使用OpenCV+Python实现我们的人员计数器7.完整代码peopl...
    99+
    2024-04-02
  • PythonOpenCV使用dlib进行多目标跟踪详解
    目录1.使用 dlib 进行多目标跟踪2.项目结构3.dlib 多对象跟踪的简单“朴素”方法4.快速、高效的 dlib 多对象跟踪实现5.完整代码6.改进和建...
    99+
    2024-04-02
  • 基于OpenCV4.2实现单目标跟踪
    目录1.什么是目标跟踪2.跟踪与检测3.使用OpenCV4实现对象跟踪3.1使用OpenCV4实现对象跟踪C++代码3.2使用OpenCV4实现对象跟踪Python代码4.跟踪算法解...
    99+
    2024-04-02
  • python目标检测基于opencv实现目标追踪示例
    目录主要代码信息封装类更新utilspython-opencv3.0新增了一些比较有用的追踪器算法,这里根据官网示例写了一个追踪器类 程序只能运行在安装有opencv3.0以上版本和...
    99+
    2024-04-02
  • 利用OpenCV实现质心跟踪算法
    目录质心跟踪算法步骤项目结构使用 OpenCV 实现质心跟踪实现对象跟踪驱动程序脚本限制和缺点目标跟踪的过程: 1、获取对象检测的初始集 2、为每个初始检测创建唯一的ID 3、然后在...
    99+
    2024-04-02
  • OpenCV怎么使用稀疏光流实现视频对象跟踪
    这篇“OpenCV怎么使用稀疏光流实现视频对象跟踪”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“OpenCV怎么使用稀疏光流...
    99+
    2023-07-05
  • python进阶——人工智能实时目标跟踪
      大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/l...
    99+
    2023-09-05
    人工智能 python 计算机视觉 目标跟踪
  • 多目标跟踪MOT:Deepocsort+YOLOv8+OSnet实战(代码讲解)
    1.下载官方代码 mikel-brostrom/yolov8_tracking: Real-time multi-object tracking and segmentation using YOLOv8 with DeepOCSORT a...
    99+
    2023-09-04
    YOLO python 开发语言
  • Linux中使用traceroute命令跟踪目标地址
    在Linux中,可以使用traceroute命令来跟踪目标地址。该命令可以显示数据包从本地主机到目标地址的路径,并显示每个中间节点(...
    99+
    2023-09-22
    Linux
  • Python实现视频目标检测与轨迹跟踪流程详解
    目录一、原理二、代码实现1.增加多模板匹配机制2.增加轨迹平滑三、测试对比一、原理 核心思想比较简单。即通过不同旋转角度的模板同时匹配,在多个结果中,找到相似度最大的结果,即认为匹配...
    99+
    2023-01-28
    Python视频目标检测 Python视频轨迹跟踪
  • python进阶学习实时目标跟踪示例详解
    目录前言项目介绍首先先介绍几种AI视觉算法详细代码讲解完整代码及注释: 完整代码及注释:结果显示前言 本程序主要实现了python的opencv人工智能视觉模块的目标跟踪...
    99+
    2023-03-21
    python进阶实时目标跟踪 python目标跟踪
  • opencv-python+yolov3怎么实现目标检测
    这篇文章给大家分享的是有关opencv-python+yolov3怎么实现目标检测的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。目标检测概况目标检测是?目标检测,粗略来说就是:输入图片/视频,经过处理,得到:目标...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作