Python使用背景差分器实现运动物体检测

下面是详细讲解“Python使用背景差分器实现运动物体检测”的完整攻略:

1. 背景差分器简介

背景差分器是指为了找出视频中动态目标而对连续的视频图像序列进行比较的算法。在背景差分器中,将连续帧之间的差异转换成二进制图像。通过二值图像来确定运动像素,从而检测可以被视为“运动”的物体。

2. Python背景差分器实现运动物体检测步骤

在Python中,可以通过使用OpenCV库函数BackgroundSubtractorMOG2来实现背景差分器实现运动物体检测。下面是实现步骤:

  1. 导入需要的库:
import cv2
import numpy as np
  1. 定义BackgroundSubtractorMOG2对象:
fgbg = cv2.createBackgroundSubtractorMOG2(history=50, varThreshold=50, detectShadows=False)
  1. 读入视频流:
cap = cv2.VideoCapture('test.mp4')
  1. 循环处理每一帧图像:
while(1):
    ret, frame = cap.read() # 获取读取状态和图像帧
  1. 对每帧图像进行预处理:
    # 转化为灰色图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    # 高斯模糊处理 
    gray = cv2.GaussianBlur(gray, (3,3), 0) 
  1. 使用createBackgroundSubtractorMOG2进行背景差分计算,并得到运动物体的图像:
    fgmask = fgbg.apply(gray) 
  1. 对运动物体的图像进行二值化处理:
    ret, binary = cv2.threshold(fgmask, 127, 255, cv2.THRESH_BINARY) 
  1. 将检测到的运动物体用矩形框圈出来,并显示图像:
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 
    for c in contours: 
        rect = cv2.boundingRect(c) 
        if rect[2] < 100 or rect[3] < 100: # 忽略太小的矩形框 
            continue
        cv2.rectangle(frame, rect, (0, 255, 0), 2) 
    cv2.imshow('frame', frame) 
  1. 进行如下的清理工作,避免内存不足:
    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
        break 
cap.release() 
cv2.destroyAllWindows()

3. 示例说明

下面提供两个示例,说明如何使用Python背景差分器实现运动物体检测。

示例1:检测视频中的自行车

假设我们有一个视频文件bike.mp4,它记录了一个骑自行车的人。现在,我们想要检测自行车在视频中的运动,并标出运动物体的方框。

import cv2
import numpy as np

# 定义BackgroundSubtractorMOG2对象
fgbg = cv2.createBackgroundSubtractorMOG2(history = 50, varThreshold = 50, detectShadows = False)

# 读入视频流
cap = cv2.VideoCapture('bike.mp4')

while(1):

    ret, frame = cap.read() # 获取读取状态和图像帧

    # 转化为灰色图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 高斯模糊处理
    gray = cv2.GaussianBlur(gray, (3,3), 0)

    # 使用createBackgroundSubtractorMOG2进行背景差分计算,并得到运动物体的图像
    fgmask = fgbg.apply(gray)

    # 对运动物体的图像进行二值化处理
    ret, binary = cv2.threshold(fgmask, 127, 255, cv2.THRESH_BINARY)

    # 将检测到的运动物体用矩形框圈出来,并显示图像
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for c in contours:
        rect = cv2.boundingRect(c)
        if rect[2] < 100 or rect[3] < 100: # 忽略太小的矩形框
            continue
        cv2.rectangle(frame, rect, (0, 255, 0), 2)

    # 显示视频流
    cv2.imshow('frame', frame)

    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

示例2:检测实时摄像头中的运动物体

假设我们有一个开启的摄像头或视频流,想要进行实时的运动物体检测。下面给出示例代码:

import cv2
import numpy as np

# 定义BackgroundSubtractorMOG2对象
fgbg = cv2.createBackgroundSubtractorMOG2(history = 50, varThreshold = 50, detectShadows = False)

# 读入视频流
cap = cv2.VideoCapture(0)

while(1):

    ret, frame = cap.read() # 获取读取状态和图像帧

    # 转化为灰色图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 高斯模糊处理
    gray = cv2.GaussianBlur(gray, (3,3), 0)

    # 使用createBackgroundSubtractorMOG2进行背景差分计算,并得到运动物体的图像
    fgmask = fgbg.apply(gray)

    # 对运动物体的图像进行二值化处理
    ret, binary = cv2.threshold(fgmask, 127, 255, cv2.THRESH_BINARY)

    # 将检测到的运动物体用矩形框圈出来,并显示图像
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for c in contours:
        rect = cv2.boundingRect(c)
        if rect[2] < 100 or rect[3] < 100: # 忽略太小的矩形框
            continue
        cv2.rectangle(frame, rect, (0, 255, 0), 2)

    # 显示视频流
    cv2.imshow('frame', frame)

    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

通过以上的示例说明,可以看出如何使用Python和OpenCV实现背景差分器的运动物体检测。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python使用背景差分器实现运动物体检测 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • python和php学习哪个更有发展

    首先,需要明确python和php都是目前非常热门的编程语言,都具有广泛的应用场景。如果想要选择其中一种语言进行学习,需要考虑自己的兴趣、职业规划以及市场需求等多个因素。下面就为大家提供一些精准的攻略和示例说明: 1. Python 1.1 优点 Python语法简单易懂,容易上手; Python有广泛的应用场景,如人工智能、数据分析、网络爬虫等; Pyth…

    人工智能概览 2023年5月25日
    00
  • 写论文有福啦! 只需1秒即可把PDF文件转换成Word格式

    下面是详细讲解“写论文有福啦! 只需1秒即可把PDF文件转换成Word格式”的完整攻略。 1. 确定使用转换工具 有很多PDF文件转Word的工具,其中一些是免费的,一些是收费的。你可以通过搜索引擎或者推荐网站找到各种类型的转换工具,例如Adobe Acrobat、Smallpdf、Zamzar、WPS PDF to Word Converter等等。 2.…

    人工智能概览 2023年5月25日
    00
  • DjangoWeb使用Datatable进行后端分页的实现

    以下是关于“DjangoWeb使用Datatable进行后端分页的实现”的完整攻略: 一、什么是Datatable? Datatable 是一个强大的 JavaScript 表格插件,能够轻松地处理大量和多样化的数据。它提供了内置的搜索、排序、分页及对列宽等的设定等功能,可自由定制。 二、为什么用Datatable? 使用Datatable作为后台分页的实现…

    人工智能概览 2023年5月25日
    00
  • ubuntu下没有中文输入法的解决办法

    当在Ubuntu系统下要输入中文时,通常需要借助中文输入法。但是,很多人会发现他们的Ubuntu系统里没有自带中文输入法或者安装中文输入法后无法正常使用。接下来,就让我来为大家提供一份完整的攻略,教大家如何在Ubuntu下解决没有中文输入法的问题。 步骤1:安装IBus-pinyin IBus-pinyin是一款能够使用拼音输入方法的输入法引擎,在Ubunt…

    人工智能概览 2023年5月25日
    00
  • Linux系统中设置多版本PHP共存配合Nginx服务器使用

    下面是关于Linux系统中设置多版本PHP共存配合Nginx服务器使用的完整攻略。 准备工作 在进行如下操作之前,需要先在Linux系统上安装好Nginx服务器,以及所需的各版本PHP。 步骤一:安装fastcgi 为了让Nginx能够运行PHP脚本,需要安装fastcgi。在终端执行以下命令: sudo apt-get install fastcgi 步骤…

    人工智能概览 2023年5月25日
    00
  • 给Django Admin添加验证码和多次登录尝试限制的实现

    为加强Django Admin的安全性,可以添加验证码和多次登录尝试限制的实现。下面就详细介绍这个过程,包括以下步骤: 安装所需依赖 在requirements.txt文件中添加以下两个依赖: django-simple-captcha==0.5.12 django-axes==5.9.0 通过pip安装依赖:pip install -r requireme…

    人工智能概览 2023年5月25日
    00
  • django轻松使用富文本编辑器CKEditor的方法

    下面是整个攻略的完整步骤: 准备工作 安装django:在终端输入pip install django进行安装,并创建一个django项目。 下载CKEditor:在官网下载CKEditor,并解压到项目的静态文件目录。 安装django-ckeditor插件:在终端输入pip install django-ckeditor进行安装,并添加到django项目…

    人工智能概览 2023年5月25日
    00
  • 使用git代替FTP部署代码到服务器的例子

    使用git代替FTP部署代码到服务器的攻略如下: 配置服务器 注册一个服务器账户,并通过ssh连接到服务器。 安装git和web服务器。 如果你的服务器上还没有安装git,可以使用apt-get或yum等包管理工具安装。 安装web服务器,例如Apache或Nginx,用于服务于你的应用程序。 配置本地环境 确保本地电脑上已安装git。 在本地代码库中初始化…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部