opencv3/C++关于移动对象的轮廓的跟踪详解

 更新时间:2020年4月25日 17:24  点击:1772

使用opencv提供的背景去除算法(KNN或高斯混合模型GMM)去除背景,然后将获取的目标二值化后通过筛选目标轮廓获得目标位置。

#include<opencv2/opencv.hpp>
using namespace cv;
//基于移动对象的轮廓的跟踪
int main()
{
  Mat frame;
  bool flag = true;
  VideoCapture capture;
  capture.open(0);
  if (!capture.isOpened())
  {
    printf("can not open ......\n");
    return -1;
  }
  namedWindow("mask", WINDOW_AUTOSIZE);
  namedWindow("output", WINDOW_AUTOSIZE); 
  Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();
  //Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
  while (capture.read(frame))
  {
    Mat KNNMask;
    std::vector<std::vector<Point>>contours;
    pKNN->apply(frame, KNNMask);
    //(*pMOG2).apply(frame, mogMask);
    threshold(KNNMask, KNNMask, 100, 255, THRESH_BINARY);
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
    morphologyEx(KNNMask, KNNMask, MORPH_OPEN, kernel, Point(-1,-1));
    findContours(KNNMask, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0,0));
    for (int i = 0; i < contours.size(); i++)
    {
      //轮廓面积
      double area = contourArea(contours[i]);
      //轮廓外接矩阵
      Rect rect = boundingRect(contours[i]);
      if (area < 500 || rect.width < 50 || rect.height < 50) continue;
      rectangle(frame, rect, Scalar(0,255,255),2);
      putText(frame, "Target", Point(rect.x, rect.y), CV_FONT_NORMAL, FONT_HERSHEY_PLAIN, Scalar(0,255,0),2,8);
    }
    imshow("mask",KNNMask);
    imshow("output",frame);
    waitKey(1);
  }
  return 0;
}

以上这篇opencv3/C++关于移动对象的轮廓的跟踪详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • opencv3/C++轮廓的提取与筛选方式

    今天小编就为大家分享一篇opencv3/C++轮廓的提取与筛选方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++ 直方图反向投影实例

    今天小编就为大家分享一篇opencv3/C++ 直方图反向投影实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++实现光流点追踪

    今天小编就为大家分享一篇opencv3/C++实现光流点追踪,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

    这篇文章主要介绍了Python实现图片查找轮廓、多边形拟合、最小外接矩形代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-14
  • python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)

    这篇文章主要介绍了python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-04-29
  • opencv3/C++ HOG特征提取方式

    今天小编就为大家分享一篇opencv3/C++ HOG特征提取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++基于颜色的目标跟踪方式

    今天小编就为大家分享一篇opencv3/C++基于颜色的目标跟踪方式,具有很好的参考价值,希望对的有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++ FLANN特征匹配方式

    今天小编就为大家分享一篇opencv3/C++ FLANN特征匹配方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++实现霍夫圆/直线检测

    今天小编就为大家分享一篇opencv3/C++实现霍夫圆/直线检测,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++ PHash算法图像检索详解

    今天小编就为大家分享一篇opencv3/C++ PHash算法图像检索详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • opencv3/C++ 将图片转换为视频的实例

    今天小编就为大家分享一篇opencv3/C++ 将图片转换为视频的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • OpenCV实现对象跟踪的方法

    OpenCV 是一个很好的处理图像和视频的工具,本文主要介绍了OpenCV 进行对象跟踪,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-19
  • opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • python实现图像外边界跟踪操作

    这篇文章主要介绍了python实现图像外边界跟踪操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-13
  • opencv3/C++图像边缘提取方式

    今天小编就为大家分享一篇opencv3/C++图像边缘提取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • Opencv基于CamShift算法实现目标跟踪

    这篇文章主要为大家详细介绍了Opencv基于CamShift算法实现目标跟踪,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • VS2015+Qt5+OpenCV3开发环境配置

    这篇文章主要为大家详细介绍了VS2015+Qt5+OpenCV3开发环境配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • opencv3/C++关于移动对象的轮廓的跟踪详解

    今天小编就为大家分享一篇opencv3/C++关于移动对象的轮廓的跟踪详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • OpenCV实现轮廓外接多边形

    这篇文章主要为大家详细介绍了OpenCV实现轮廓外接多边形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-23
  • opencv3/C++视频中叠加透明图片的实现

    今天小编就为大家分享一篇opencv3/C++视频中叠加透明图片的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25