使用OpenCV实现检测和追踪车辆

本文实例为大家分享了OpenCV实现检测和追踪车辆的具体代码,供大家参考,具体内容如下

完整源码GitHub

  • 使用高斯混合模型(BackgroundSubtractorMOG2)对背景建模,提取出前景
  • 使用中值滤波去掉椒盐噪声,再闭运算和开运算填充空洞
  • 使用cvBlob库追踪车辆,我稍微修改了cvBlob源码来通过编译

由于要对背景建模,这个方法要求背景是静止的
另外不同车辆白色区域不能连通,否则会认为是同一物体

void processVideo(char* videoFilename)
{
  Mat frame; // current frame
  Mat fgMaskMOG2; // fg mask fg mask generated by MOG2 method
  Mat bgImg; // background
  Ptr<BackgroundSubtractorMOG2> pMOG2 = createBackgroundSubtractorMOG2(200, 36.0, false); // MOG2 Background subtractor 

  while (true)
  {
    VideoCapture capture(videoFilename);
    if (!capture.isOpened())
    {
      cerr << "Unable to open video file: " << videoFilename << endl;
      return;
    } 

    int width = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);
    int height = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT); 

    unique_ptr<IplImage, void(*)(IplImage*)> labelImg(cvCreateImage(cvSize(width, height), IPL_DEPTH_LABEL, 1),
      [](IplImage* p){ cvReleaseImage(&p); });
    CvBlobs blobs;
    CvTracks tracks; 

    while (true)
    {
      // read input data. ESC or 'q' for quitting
      int key = waitKey(1);
      if (key == 'q' || key == 27)
        return;
      if (!capture.read(frame))
        break; 

      // update background
      pMOG2->apply(frame, fgMaskMOG2);
      pMOG2->getBackgroundImage(bgImg);
      imshow("BG", bgImg);
      imshow("Original mask", fgMaskMOG2); 

      // post process
      medianBlur(fgMaskMOG2, fgMaskMOG2, 5);
      imshow("medianBlur", fgMaskMOG2);
      morphologyEx(fgMaskMOG2, fgMaskMOG2, MORPH_CLOSE, getStructuringElement(MORPH_RECT, Size(5, 5))); // fill black holes
      morphologyEx(fgMaskMOG2, fgMaskMOG2, MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(5, 5))); // fill white holes
      imshow("morphologyEx", fgMaskMOG2); 

      // track
      cvLabel(&IplImage(fgMaskMOG2), labelImg.get(), blobs);
      cvFilterByArea(blobs, 64, 10000);
      cvUpdateTracks(blobs, tracks, 10, 90, 30);
      cvRenderTracks(tracks, &IplImage(frame), &IplImage(frame)); 

      // show
      imshow("Frame", frame); 

      key = waitKey(30);
    }
  }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Opencv基于CamShift算法实现目标跟踪
  • opencv+arduino实现物体点追踪效果
  • Opencv光流运动物体追踪详解
(0)

相关推荐

  • Opencv基于CamShift算法实现目标跟踪

    CamShift算法全称是"Continuously Adaptive Mean-Shift"(连续的自适应MeanShift算法),是对MeanShift算法的改进算法,可以在跟踪的过程中随着目标大小的变化实时调整搜索窗口大小,对于视频序列中的每一帧还是采用MeanShift来寻找最优迭代结果,至于如何实现自动调整窗口大小的,可以查到的论述较少,我的理解是通过对MeanShift算法中零阶矩的判断实现的. 在MeanShift算法中寻找搜索窗口的质心用到窗口的零阶矩M00和一阶矩M1

  • opencv+arduino实现物体点追踪效果

    本文所要实现的结果是:通过在摄像头中选择一个追踪点,通过pc控制摄像头的舵机,使这一点始终在图像的中心. 要点:使用光流法在舵机旋转的同时进行追踪,若该点运动,则摄像头跟踪联动. #include<opencv2\opencv.hpp> #include<opencv\cv.h> #include<opencv\highgui.h> #include<math.h> #include<Windows.h> #include<string.h

  • Opencv光流运动物体追踪详解

    光流的概念是由一个叫Gibson的哥们在1950年提出来的.它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法.那么所说的光流到底是什么? 简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的"运动".研究光流场的目的就是为了从

  • 使用OpenCV实现检测和追踪车辆

    本文实例为大家分享了OpenCV实现检测和追踪车辆的具体代码,供大家参考,具体内容如下 完整源码GitHub 使用高斯混合模型(BackgroundSubtractorMOG2)对背景建模,提取出前景 使用中值滤波去掉椒盐噪声,再闭运算和开运算填充空洞 使用cvBlob库追踪车辆,我稍微修改了cvBlob源码来通过编译 由于要对背景建模,这个方法要求背景是静止的 另外不同车辆白色区域不能连通,否则会认为是同一物体 void processVideo(char* videoFilename) {

  • Python+Opencv实战之人脸追踪详解

    目录 前言 人脸追踪技术简介 使用基于 dlib DCF 的跟踪器进行人脸跟踪 使用基于 dlib DCF 的跟踪器进行对象跟踪 小结 前言 人脸处理是人工智能中的一个热门话题,人脸处理可以使用计算机视觉算法从人脸中自动提取大量信息,例如身份.意图和情感:而目标跟踪试图估计目标在整个视频序列中的轨迹,其中只有目标的初始位置是已知的,将这两者进行结合将产生许多有趣的应用.由于外观变化.遮挡.快速运动.运动模糊和比例变化等多种因素,人脸追踪非常具有挑战性. 人脸追踪技术简介 基于判别相关滤波器 (d

  • 10个步骤Opencv轻松检测出图片中条形码

    本文为大家分享了Opencv轻松检测出图片中条形码的步骤,供大家参考,具体内容如下 1. 原图像大小调整,提高运算效率 2. 转化为灰度图 3. 高斯平滑滤波 4.求得水平和垂直方向灰度图像的梯度差,使用Sobel算子 5.均值滤波,消除高频噪声 6.二值化 7.闭运算,填充条形码间隙 8. 腐蚀,去除孤立的点 9. 膨胀,填充条形码间空隙,根据核的大小,有可能需要2~3次膨胀操作 10.通过findContours找到条形码区域的矩形边界 实现: #include "core/core.hpp

  • python+opencv轮廓检测代码解析

    首先大家可以对OpenCV有个初步的了解,可以参考:简单了解OpenCV 轮廓(Contours),指的是有相同颜色或者密度,连接所有连续点的一条曲线.检测轮廓的工作对形状分析和物体检测与识别都非常有用. 在轮廓检测之前,首先要对图片进行二值化或者Canny边缘检测.在OpenCV中,寻找的物体是白色的,而背景必须是黑色的,因此图片预处理时必须保证这一点. import cv2 #读入图片 img = cv2.imread("1.png") # 必须先转化成灰度图 gray = cv2

  • python opencv人脸检测提取及保存方法

    注意这里提取到的人脸图片的保存地址要改成自己要保存的地址 opencv人脸的检测模型的路径也要更改为自己安装的opencv的人脸检测模型的路径 import cv2 save_path = 'F:\\face_photo_save\\chenym\\' cascade = cv2.CascadeClassifier("D:\\opencv249\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt_tree.xml&q

  • python opencv肤色检测的实现示例

    1 椭圆肤色检测模型 原理:将RGB图像转换到YCRCB空间,肤色像素点会聚集到一个椭圆区域.先定义一个椭圆模型,然后将每个RGB像素点转换到YCRCB空间比对是否再椭圆区域,是的话判断为皮肤. YCRCB颜色空间 椭圆模型 代码 def ellipse_detect(image): """ :param image: 图片路径 :return: None """ img = cv2.imread(image,cv2.IMREAD_COLOR)

  • Python opencv缺陷检测的实现及问题解决

    题目描述 利用opencv或其他工具编写程序实现缺陷检测. 实现过程 # -*- coding: utf-8 -*- ''' 作者 : 丁毅 开发时间 : 2021/4/21 15:30 ''' import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont import matplotlib.pyplot as plt #用于给图片添加中文字符的函数 def cv2ImgAddText(img, text, l

  • Python+Opencv文本检测的实现

    目录 EAST 深度学习文本检测器 项目结构 实施说明 使用 OpenCV 实现我们的文本检测器 OpenCV 文本检测结果 视频文字检测结果 在本教程中,您将学习如何使用 OpenCV 使用 EAST 文本检测器检测图像中的文本. EAST 文本检测器要求我们在我们的系统上运行 OpenCV 3.4.2 或 OpenCV 4 . 论文原文 代码地址 原文 在今天教程的第一部分中,我将讨论为什么在自然场景图像中检测文本会如此具有挑战性. 从那里我将简要讨论 EAST 文本检测器,我们为什么使用它

  • OpenCV轮廓检测之boundingRect绘制矩形边框

    目录 函数原型 参数说明 测试代码 测试效果 补充 函数原型 cv::Rect boundingRect( InputArray array ); 参数说明 输入:InputArray类型的array,输入灰度图像或二维点集. 输出:Rect类型的矩形信息,包括矩形尺寸和位置. 测试代码 #include <iostream> #include <time.h> #include <opencv2/opencv.hpp> using namespace std; usi

随机推荐