【python】OpenCV—Tracking(10.1)

在这里插入图片描述

学习来自《Learning OpenCV 3 Computer Vision with Python》Second Edition by Joe Minichino and Joseph Howse

文章目录

  • 检测移动的目标
  • 涉及到的 opencv 库
    • cv2.GaussianBlur
    • cv2.absdiff
    • cv2.threshold
    • cv2.dilate
    • cv2.getStructuringElement
    • cv2.findContours
    • cv2.contourArea
    • cv2.boundingRect


检测移动的目标

目标跟踪:基本的运动检测

一种最直观的方法就是计算帧之间的差异,或者考虑背景帧与其他帧之间的差异

import cv2
import numpy as npes = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))  # 我跑的时候用的 (9,9) 圆
background = None
index = 0cap = cv2.VideoCapture("2.mkv")if cap.isOpened():success = True
else:success = Falseprint("fail to open")while(success):success, frame = cap.read()index += 1h, w, c = frame.shape# 第一帧作为背景if background is None:background = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) background = cv2.GaussianBlur(background, (21, 21), 0)continue# 对噪声进行平滑是为了避免在运动和跟踪时将其检测出来gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_frame = cv2.GaussianBlur(gray_frame, (21, 21), 0)diff = cv2.absdiff(background, gray_frame)diff = cv2.threshold(diff, 127, 255, cv2.THRESH_BINARY)[1]  # 大于 127 就置为 255# 腐蚀和膨胀也可以用作噪声滤波器diff = cv2.dilate(diff, es, iterations=2)# image, cnts, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cnts, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for c in cnts:if cv2.contourArea(c) < 0.25*h*0.25*w:# if cv2.contourArea(c) < 2500:continue(x, y, w, h) = cv2.boundingRect(c) # 计算矩形的边界框 cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 10)cv2.imshow("contours", frame)cv2.imshow("diff", diff)if cv2.waitKey(1000 // 12) & 0xff == ord("q"):break
cv2.destroyAllWindows()
cap.release()

先看下效果

原视频,720p

在这里插入图片描述

cv2.dilate(diff, es, iterations=2) 时 diff 的效果,也即高斯模糊后的当前帧和背景帧差的绝对值膨胀两次后的效果

请添加图片描述

过滤掉小于 2500 的轮廓时的效果,并以矩形框的形式可视化出来

请添加图片描述
看起来太敏感了,我们来个粗犷一些的

膨胀 30 次,cv2.dilate(diff, es, iterations=30) ,diff 的效果如下

请添加图片描述
过滤掉 if cv2.contourArea(c) < 0.25*h*0.25*w: 面积小于 6.25% 的移动区域,轮廓可视化成矩形框如下

请添加图片描述
还行

技术缺点

  • 需要通过提前设置“默认”帧作为背景,在光照变化频繁时就显得不够灵活

涉及到的 opencv 库

cv2.GaussianBlur

高斯模糊
在这里插入图片描述

cv2.absdiff

计算两个数组之间或数组与标量之间每个元素的绝对差

在这里插入图片描述

cv2.threshold

二值化函数
在这里插入图片描述

cv2.dilate

形态学膨胀
在这里插入图片描述

cv2.getStructuringElement

得到一个结构元素(卷积核),主要用于后续的腐蚀、膨胀、开、闭等运算

  • MORPH_RECT(函数返回矩形卷积核)
  • MORPH_CROSS(函数返回十字形卷积核)
  • MORPH_ELLIPSE(函数返回椭圆形卷积核)

在这里插入图片描述
anchor 表示描点的位置

cv2.findContours

找轮廓
在这里插入图片描述

mode:轮廓的模式。

  • cv2.RETR_EXTERNAL 只检测外轮廓;
  • cv2.RETR_LIST 检测的轮廓不建立等级关系;
  • cv2.RETR_CCOMP 建立两个等级的轮廓,上一层为外边界,内层为内孔的边界。如果内孔内还有连通物体,则这个物体的边界也在顶层;
  • cv2.RETR_TREE 建立一个等级树结构的轮廓。

method:轮廓的近似方法

  • cv2.CHAIN_APPROX_NOME存储所有的轮廓点,相邻的两个点的像素位置差不超过1;
  • cv2.CHAIN_APPROX_SIMPLE 压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需要4个点来保存轮廓信息;
  • cv2.CHAIN_APPROX_TC89_L1,cv2.CV_CHAIN_APPROX_TC89_KCOS

contours:返回的轮廓

hierarchy:每条轮廓对应的属性

cv2.contourArea

轮廓面积
在这里插入图片描述

cv2.boundingRect

轮廓拟合函数

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/251738.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: React中处理hydrate的核心流程源码实现

hydrate 1 &#xff09;概述 hydrate 在react当中不算特别重要, 但是很多时候会用到的一个API这个 API 它主要作用就是在进入第一次渲染的时候&#xff0c;如果本身 dom 树上面已经有一个dom结构存在是否可以去利用这一部分已经存在的dom&#xff0c;然后去避免掉在第一次渲染…

小华和小为的聚餐地点 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 小华和小为是很要好的朋友,他们约定周末一起吃饭。 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达)。 求小华和小为都能到达的聚餐地点有多少个? 输入描述…

在本地运行大型语言模型 (LLM) 的六种方法(2024 年 1 月)

一、说明 &#xff08;开放&#xff09;本地大型语言模型&#xff08;LLM&#xff09;&#xff0c;特别是在 Meta 发布LLaMA和后Llama 2&#xff0c;变得越来越好&#xff0c;并且被越来越广泛地采用。 在本文中&#xff0c;我想演示在本地&#xff08;即在您的计算机上&#x…

最值得推荐收藏的 7 款 Android 系统修复软件,快速的修复手机异常

在当今世界&#xff0c;移动设备是我们生活的重要组成部分。我们将它们用于沟通、工作、娱乐和许多其他目的。然而&#xff0c;随着不断的使用&#xff0c;它们通常会面临速度慢、崩溃等问题。这可能会让人烦恼和沮丧。但是&#xff0c;值得庆幸的是&#xff0c;您可以在 Andro…

【51单片机系列】中断优先级介绍及使用

文章来源&#xff1a;《51单片机原理及应用&#xff08;第3版&#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断&#xff0c;又发生更高级中断时&#xff0c;此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…

零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法

零基础学编程系列&#xff0c;从入门到精通&#xff0c;中文编程开发语言工具下载&#xff0c;编程构件容器件之控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载…

【安装指南】nodejs下载、安装与配置详细教程

目录 &#x1f33c;一、概述 &#x1f340;二、下载node.js &#x1f337;三、安装node.js &#x1f341;四、配置node.js &#x1f33c;一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、…

机器学习笔记-聚类算法

机器学习笔记-聚类算法 聚类算法K-meansk-means的模型评估k-means的优化 PCA降维主成分分析-PCA降维 PCAK-means例子 聚类算法K-means 代码 import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_blobs from sklearn.cluster import KMeans …

JS第一天、数据类型检测、内存释放

复习&#xff1a; 以下类型都是 object console.log(typeof new Object); console.log(typeof new Array()); console.log(typeof new Date()); console.log(typeof new RegExp()); console.log(typeof new String()); console.log(typeof new Number()); console.log(typeof…

乐意购项目前端开发 #7

一、购物车 本地购物车 创建cartStore.js文件 创建cartStore.js文件, 将购物车列表数据存在pinia中 import { ref, computed } from "vue"; import { defineStore } from "pinia"; import { useUserStore } from "./user"; import {insertCart…

C#,哥伦布数(Golomb Number)的算法与源代码

1 哥伦布数&#xff08;Golomb Number&#xff09; 哥伦布数&#xff08;Golomb Number&#xff09;是一个自然数的非减量序列&#xff0c;使得n在序列中正好出现G&#xff08;n&#xff09;次。前几个15的G&#xff08;n&#xff09;值为&#xff1a;1 2 2 3 3 4 4 4 5 5 5 6…

自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)

国内有非常多好用的人工智能工具&#xff0c;但均无法完全替代国外ChatGpt。 ChatGPT相较于其他国内工具的优势在于以下几点&#xff1a; 创新的语言生成能力&#xff1a;ChatGPT是由OpenAI开发的先进的自然语言生成模型&#xff0c;它采用了大规模的预训练和精细调整方法。因此…

项目02《游戏-08-开发》Unity3D

基于 项目02《游戏-07-开发》Unity3D &#xff0c; 本次任务做物品相互与详情的功能&#xff0c; 首先要做 点击相应&#xff0c; 接下来用接口实现点击相应事件&#xff0c;具体到代码中&#xff0c;我们找到需要响应鼠标事件的对象&#xff0c; 双击PackageCell…

arcpy高德爬取路况信息数据json转shp

最近工作上遇到爬取的高德路况信息数据需要在地图上展示出来&#xff0c;由于json数据不具备直接可视化的能力&#xff0c;又联想到前两个月学习了一点点arcpy的知识&#xff0c;就花了一些时间去写了个代码&#xff0c;毕竟手动处理要了老命了。 1、json文件解读 json文件显…

一键部署FC超级马里奥web游戏

效果展示 安装 拉取镜像 #拉取镜像 docker pull stayhungrystayfoolish666/mario #创建并启动容器 docker run -d -p 10034:8080 --name maliao --restartalways stayhungrystayfoolish666/mario:latest 使用 浏览器打开 http://你的ip:10034/

Qt之使用Qt内置图标

一效果 二.原理 Qt内置图标封装在QStyle中,共七十多个图标,可以直接拿来用,能应付不少简单程序需求,不用自己去找图标并添加到资源文件了。 下面是内置图标的枚举定义: enum StandardPixmap {SP_TitleBarMenuButton,SP_TitleBarMinButton,SP_TitleBarMaxButton,SP_T…

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测&#xff0c;10种类型&#xff0c;YOLOV8训练&#xff0c;转换成ONNX&#xff0c;OPENCV调用资源-CSDN文库 植物病害检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTH…

4.0 HDFS 配置与使用

之前提到过的 Hadoop 三种模式&#xff1a;单机模式、伪集群模式和集群模式。 单机模式&#xff1a;Hadoop 仅作为库存在&#xff0c;可以在单计算机上执行 MapReduce 任务&#xff0c;仅用于开发者搭建学习和试验环境。 伪集群模式&#xff1a;此模式 Hadoop 将以守护进程的…

【python】python爱心代码【附源码】

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、完整代码&#xff1a; import math import random import threading import time from math import sin, cos, pi, log from tkinter import * import re# 烟花相关设置 Fireworks [] m…

kvm qemu 优化 windows 虚拟机速度

主要优化磁盘 io 和网络 io 都选为 virtio windows 驱动下载 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.185-2/virtio-win-0.1.185.iso I also had incredibly slow performance with my virtual HDD. The followin…