首页 > 其他分享 >OPCV 移动物体检测

OPCV 移动物体检测

时间:2024-03-17 22:55:04浏览次数:18  
标签:检测 物体 cap cv2 OPCV thresh frame2 差值 差异

1.差值法检测 :

差值法是一种简单而有效的移动物体检测技术,适用于监控和实时跟踪系统。其核心思想是通过比较连续视频帧之间的差异来识别移动物体。


  .1 >差值法原理
差值法的基本原理是比较连续两帧或多帧图像间的像素差异。对于静态背景,相邻帧间的差异较小,而对于移动物体,由于其位置的变化,相邻帧间的像素值会有较大差异。
  .2 >差值法公式
设 I ( x , y , t ) I(x, y, t) I(x,y,t)为在时间 t t t时刻,图像在位置 ( x , y ) (x, y) (x,y)的像素值。差值法通过计算相邻两帧图像的差异来检测移动物体:


D ( x , y , t ) = ∣ I ( x , y , t ) − I ( x , y , t − 1 ) ∣ D(x, y, t) = |I(x, y, t) - I(x, y, t-1)| D(x,y,t)=∣I(x,y,t)−I(x,y,t−1)∣
其中, D ( x , y , t ) D(x, y, t) D(x,y,t)表示时刻 t t t与时刻 t − 1 t-1 t−1之间在位置 ( x , y ) (x, y) (x,y)的像素差异。\

代码实现:

import cv2

# # 初始化摄像头
# cap = cv2.VideoCapture(0)
# 读取视频
cap = cv2.VideoCapture('video.mp4')

# 读取第一帧
ret, frame1 = cap.read()
gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

# 定义矩形结构元素
rectangle_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

while True:
    # 读取下一帧
    ret, frame2 = cap.read()
    if not ret:
        break  # 如果视频结束,跳出循环

    gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

    # 计算两帧的差异
    diff = cv2.absdiff(gray1, gray2)

    # 二值化以突出差异
    _, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
    thresh = cv2.dilate(thresh, rectangle_kernel, iterations=2)  # 膨胀操作,使轮廓更清晰

    # 找出轮廓
    _, contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 识别面积最大的轮廓
    if contours:
        largest_contour = max(contours, key=cv2.contourArea)
        x, y, w, h = cv2.boundingRect(largest_contour)
        cv2.rectangle(frame2, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 用绿色矩形框出

    # 显示结果
    thresh_img = cv2.merge([thresh, thresh, thresh])
    cv2.imshow('Difference', cv2.hconcat([frame2, thresh_img]))
    # 准备下一次迭代
    gray1 = gray2

    # 按'q'退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

 

标签:检测,物体,cap,cv2,OPCV,thresh,frame2,差值,差异
From: https://www.cnblogs.com/hetaoBlog/p/18078518

相关文章

  • 基于yolov2深度学习网络的视频手部检测算法matlab仿真
    1.算法运行效果图预览输入mp4格式的视频文件进行测试,视频格式为1080p@30.   2.算法运行软件版本matlab2022a  3.算法理论概述         近年来,深度学习在计算机视觉领域取得了显著成果,特别是在目标检测任务中。YOLO(YouOnlyLookOnce)系列算法作为其中......
  • 079基于深度学习的香蕉成熟度检测小程序版_含10多种模型
    代码下载和视频演示地址:079基于深度学习的香蕉成熟度检测小程序版_含10多种模型_哔哩哔哩_bilibili效果展示图如下:​代码文件展示如下: ​运行01数据集文本生成制作.py可以读取图片路径保存再txt文本中,运行02train.py可以对txt文本中的图片路径读取并训练模型,在02......
  • 毕业设计:基于计算机视觉的遛狗牵绳识别系统 目标检测
    目录前言课题背景和意义实现技术思路一、 算法理论基础1.1 卷积神经网络1.2 注意力机制二、 数据集2.1数据集2.2数据扩充三、实验及结果分析3.1 实验环境搭建3.2 模型训练最后前言  ......
  • 毕业设计:基于机器学习的工地员工安全着装识别系统 目标检测
    目录前言课题背景和意义实现技术思路一、算法理论基础1.1 Mobilenet算法1.2 人脸检测模型二、 数据集2.1数据集2.2数据扩充三、实验及结果分析3.1 实验环境搭建3.2 模型训练最后前言  ......
  • Harris/Shi-Tomasi角点检测
    机器视觉——角点检测什么是角点检测在几何学里,我们会看到各种各样的三角形、多边形等,它们都有一个显著的特征:包含了角点信息。比如在三角形里,我们有三个角;在矩形里,我们有四个角。我们将找到这些图像特征的过程称为特征提取(FeatureExtraction),我们之前所接触的Canny边缘检测......
  • 【火灾检测】基于matlab GUI视频图像多特征火灾检测报警系统【含Matlab源码 4092期】
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。......
  • 节点异常检测-二维高斯分布
    所以一个样本是一个椭圆曲线吗?不完全是这样。在二维高斯分布的上下文中,单个样本是分布中的一个点,而不是一个椭圆曲线。椭圆曲线实际上表示的是等高线,也就是概率密度函数在不同值下的轮廓线。每条椭圆曲线上的点具有相同的概率密度,这些椭圆反映了数据的分布特性,如集中趋势和变异情......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的花卉检测与识别系统(附完整资源+PySide6界面+训练代
    摘要:本篇博客介绍了一种基于深度学习的花卉检测与识别系统,并详细展示了其实现代码。系统采取先进的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了比较,展示了其在图像、视频、实时视频流及批量文件中识别花卉的高准确度。文章深入阐释了YOLOv8的工作机制,并配备了相应的Pyt......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰检测系统(Python+PySide6界面+训练代码)
    摘要:本研究详述了一种采用深度学习技术的火焰检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别火焰目标或着火点等。文章深入阐述了YOLOv8算法......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰与烟雾检测系统详解(深度学习模型+UI界面升级版
    摘要:本研究详细介绍了一种集成了最新YOLOv8算法的火焰与烟雾检测系统,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行性能评估对比。该系统能够在包括图像、视频文件、实时视频流及批量文件中准确识别火焰与烟雾。文章深入探讨了YOLOv8算法的原理,提供了Python实现代码、训练数据集,以及......