python---OpenCv(二),背景分离方法较有意思
目录
边界矩形
旋转矩形(最小外接矩形):
计算轮廓
找4个点的坐标
把浮点型转为Int
画轮廓
边界矩形--(最大外接矩形)
转灰度
找轮廓
找顶点
画矩形
显示
背景分离方法(这个很好玩,可以识别在动的物体)
边界矩形
有两种类型的边界矩形:
旋转矩形(最小外接矩形):
是用最小面积绘制的,所以它也考虑了旋转。使用的函数是cv.minAreaRect()。它返回一个Box2D结构,其中包含以下细节-(中心(x,y),(宽度,高度),旋转角度)。但要画出这个矩形,我们需要矩形的四个角。它由函数cv.boxPoints()获得
cv.minAreaRect()函数返回一个包含以下信息的 RotatedRect 对象:
-
center:矩形的中心坐标((x, y))。 -
size:矩形的尺寸((width, height))。 -
angle:矩形的旋转角度,取值范围为-90到0度。
cv2.boxPoints(box) 返回的是构成旋转矩形的四个顶点的坐标。返回的结果是一个形状为 (4, 2) 的 NumPy 数组,其中每一行代表一个顶点的 (x, y) 坐标。这四个顶点按照特定的顺序排列,通常是按照顺时针或逆时针方向。
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
各个参数的含义如下:
-
image:目标图像,要在其上绘制轮廓。 -
contours:轮廓列表,每个轮廓是一个点的向量。必须是一个3维的列表,且必须是整数int -
contourIdx:指定要绘制的轮廓的索引,如果为负数,则绘制所有轮廓。 -
color:绘制轮廓的颜色。 -
thickness:轮廓线的宽度,如果为负数,则轮廓内部被填充。 -
lineType:线条类型,例如cv2.LINE_8(8 连接的线)、cv2.LINE_AA(抗锯齿线)等,默认值是cv2.LINE_8。 -
hierarchy:可选的轮廓层次信息。 -
maxLevel:绘制轮廓的最大层次。如果为 0,则只绘制指定的轮廓;如果为 1,则绘制指定轮廓及其直接子轮廓,依此类推。默认值为 0。 -
offset:可选的偏移量,用于移动轮廓的位置
示例代码:
im = cv2.imread("yy.png")#图片是一个五角星 im1=im.copy() im=cv2.cvtColor(im,cv2.COLOR_BGRA2GRAY)
计算轮廓
contours,=cv2.findContours(im,cv2.RETRTREE,cv2.CHAINAPPROXSIMPLE)
找4个点的坐标
box=cv2.minAreaRect(contours[0])#因为box是一个元组套一个列表,contours就是要把列表取出来 print(box) box=cv2.boxPoints(box) print(box)
把浮点型转为Int
box=np.intp(np.round(box))
画轮廓
cv2.drawContours(im,[box],-1,(255,0,255),1,cv2.LINE_AA) cv2.imshow('最小外界矩形',im) cv2.waitKey(0) cv2.destroyAllWindows()
边界矩形--(最大外接矩形)
·直角矩形(最大外接矩形):不考虑物体的旋转。所以直角矩形的面积不是最小的。它是由函数x,y,w,h=cv2.boundingRect()找到的。

·令(x,y)为矩形的左上角坐标,而(w,h)为矩形的宽度和高度。
import cv2 import numpy as np
im = cv2.imread("yy.png")
转灰度
im1=cv2.cvtColor(im,cv2.COLOR_BGRA2GRAY)
找轮廓
contours,=cv2.findContours(im1,cv2.RETRTREE,cv2.CHAINAPPROXNONE)
找顶点
x,y,w,h=cv2.boundingRect(contours[0])
画矩形
cv2.rectangle(im,(x,y),(x+w,y+h),(255,255,1),2,cv2.LINE_AA)
显示
cv2.imshow('im',im) cv2.waitKey(0) cv2.destroyAllWindows()
效果图:一上图一样
背景分离方法(这个很好玩,可以识别在动的物体)
bgsub=cv2.createBackgroundSubtractorMOG2():创建背景减除器实例,然后用bgsub.applay(img),再show一下bgsub就可以了。可以用来检测在动的物体
减除器实例.apply(image[, fgmask[, learningRate]]) -> fgmask:计算前景掩码和更新背景。如果要更改用于更新背景模型的学习率,可以通过将参数传递给apply方法来设置特定的学习率。learningRate该值位于0到1之间,表示背景模型被学习或更新的速度。负数的参数值使算法采用自动选择的学习率。0意味着背景模型完全不进行更新,保持初始状态;1则意味着背景模型在每一帧后都会根据新信息完全重新初始化。因此,此参数控制了背景模型适应场景变化的敏感度和速度。
视频中动态的物体就是前景
静态的物体就是背景
参数说明:
-
shape:表示结构元素的形状,可以是以下几种取值: -
cv2.MORPH_RECT:矩形结构元素 -
cv2.MORPH_CROSS:十字形结构元素 -
cv2.MORPH_ELLIPSE:椭圆形结构元素 -
ksize:表示结构元素的大小 -
anchor:表示结构元素的锚点位置,默认为(-1,-1),表示结构元素的中心
代码演示:
"""视频中动态的物体就是 前景静态的物体就是背景 """import cv2cap = cv2.VideoCapture(0)# 创建背景减除器对象 bgsub = cv2.createBackgroundSubtractorMOG2()while cap.isOpened():ret, frame = cap.read()if not ret:break# 将视频中的每一帧图像应用背景减除器,减除背景fgmask = bgsub.apply(frame)cv2.imshow("win", fgmask)if cv2.waitKey(25) == 27:cv2.destroyAllWindows()break
效果:过于离谱就不展示了,只要动的地方就会变白,视频哈

相关文章:
python---OpenCv(二),背景分离方法较有意思
目录 边界矩形 旋转矩形(最小外接矩形): 计算轮廓 找4个点的坐标 把浮点型转为Int 画轮廓 边界矩形--(最大外接矩形) 转灰度 找轮廓 找顶点 画矩形 显示 背景分离方法(这个很好玩,可以识别在动的物体) 边…...
java TCP服务器与客户端通信示例
目录 背景: TCP服务代码解析: TCP服务器的代码: 服务器程序的工作流程: TCP客户端代码解析 : TCP客户端代码: 客户端工作流程: 总结: 背景: 如何使用Java编程语言实现一个简单的TCP服务器和客户端。那么TCP是什么?TCP(Transmission Control Protocol&…...
【C++】构造函数和析构函数
目录 对象初始化-构造函数构造函数的分类构造函数的调用拷贝构造的应用构造函数调用规则深拷贝和浅拷贝初始化列表类对象作为类成员静态成员 对象释放-析构函数 对象初始化-构造函数 构造函数是类实例化的时候会自动调用的初始化函数,如果用户不写编译器会提供一个…...
Docker Compose:多容器应用的管理利器
在现代应用开发中,微服务架构已成为主流。管理和编排多个容器应用变得至关重要。Docker Compose 是一个强大的工具,通过一个简单的 YAML 文件定义和运行多容器应用。本文将详细介绍 Docker Compose 的基本概念、安装、用法以及一个实际的示例,…...
Leetcode - 133双周赛
目录 一,3190. 使所有元素都可以被 3 整除的最少操作数 二,3191. 使二进制数组全部等于 1 的最少操作次数 I 三,3192. 使二进制数组全部等于 1 的最少操作次数 II 四,3193. 统计逆序对的数目 一,3190. 使所有元素都…...
C++总结
...
汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速
故障现象 一辆2016款吉利帝豪EV车,累计行驶里程约为28.4万km,车主反映车辆无法加速。 故障诊断 接车后路试,行驶约1 km,踩下加速踏板,无法加速,车速为20 km/h左右,同时组合仪表上的电机及控制…...
前端开发之webpack
安装与入门超详细!webpack入门教程(一)-腾讯云开发者社区-腾讯云...
将内容复制到剪贴板?分享 1 段优质 JS 代码片段!
大家好,我是大澈! 本文约 600 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段,使用 Clipboard API 实现将内容复制到剪贴板。 老规矩,先阅读代码片段并思考,再看代码解析…...
MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载
MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片,简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程,也就是MAS0902量产过程: 注意:开卡转接线必须要用ASM1153E或JMS578主控…...
从我邮毕业啦!!!
引言 时间过的好快,转眼间就要从北邮毕业了,距离上一次月度总结又过去了两个月,故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络,欢迎Star! 毕业🎓 6月1号完成了自己的…...
gemini 1.5 flash (node项目)
https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…...
在线字节大端序小端序转换器
具体请前往:在线字节大端序小端序转换器...
css_17_背景属性鼠标属性
一.背景属性 -属性值:background-color(设置背景颜色) 默认背景颜色是 transparent。 -属性值:background-image(设置背景图片) url(图片的地址) -属性值:background-re…...
Python hash编码(go hash编码)
id"中国人" 首先,go语言hash: import (mmh3 "murmurhash3") mmh3.Murmurhash3([]byte(id)) 对应到Python hash编码,可以直接使用mmh3 import mmh3 mmh3.hash(id,signedFalse) 其源码可以表示为 def sum32WithSeed(datas, seed…...
004 插入排序(lua)
文章目录 123 1 -- Lua中没有类和方法的概念,所以我们将所有功能都写在一个脚本中 -- 交换数组中两个元素的功能 local function swap(arr, i, j) local temp arr[i] arr[i] arr[j] arr[j] temp end -- 插入排序算法的实现 local function insertionS…...
计算机网络 —— 基本概念
基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…...
高精度除法的实现
高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …...
STM32CUBEMX配置USB虚拟串口
STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程,主要就是要知道串口的收发接口就行了。 发送:CDC_Transmit_FS(),同时记得包含头文件#include “…...
安卓开发中margin和padding的区别
在 Android 开发中,margin 和 padding 都是用来定义视图(View)的空间属性,但它们的作用和应用场景有所不同: Margin(外边距): Margin 是视图与其他视图之间的空间。它定义了视图之间…...
磁力搜索聚合工具终极指南:一键聚合23个资源站点
磁力搜索聚合工具终极指南:一键聚合23个资源站点 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 还在为寻找资源而烦恼吗?magnetW磁力链接聚合搜索工具帮你解决所有搜索难题&#…...
用Material Studio和LAMMPS搞定聚乙烯联合原子模型:从建模到拉伸仿真的保姆级避坑指南
从零构建聚乙烯联合原子模型:Material Studio与LAMMPS全流程实战解析 当你在文献中看到聚乙烯的分子动力学模拟结果时,是否好奇这些数据是如何产生的?本文将带你完整走过从分子建模到力学性能分析的每一个环节。不同于简单的软件操作指南&…...
3分钟打造纯净阅读空间:ReadCat小说阅读器新手入门指南
3分钟打造纯净阅读空间:ReadCat小说阅读器新手入门指南 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在广告泛滥、体验割裂的数字阅读时代,ReadCat小说阅读…...
魔兽争霸3帧率解锁与界面修复终极指南:3步解决所有显示异常
魔兽争霸3帧率解锁与界面修复终极指南:3步解决所有显示异常 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3的卡顿画面和界…...
智能小车避障、云台跟踪?从SG90舵机控制开始玩转STM32 HAL库PWM
从SG90舵机到智能避障小车:STM32 HAL库PWM实战指南 当第一次看到SG90舵机在智能小车上灵活转向时,那种机械结构精准响应代码指令的奇妙感,让我彻底迷上了嵌入式开发。这个重量仅9克的小型舵机,却能承载1.5kgcm的扭矩,成…...
第三方令牌泄露引发的供应链数据泄露治理研究 —— 以 Zara 事件为例
摘要 2026 年 4 月,黑客组织 ShinyHunters 通过入侵云分析服务商 Anodot 并窃取其身份认证令牌,非法访问下游多家企业云数据平台,导致快时尚品牌 Zara 近 19.7 万名用户信息泄露,泄露字段含电子邮箱、订单 ID、商品 SKU 及客服工单…...
Asp.net Mvc教学: LINQ相关的几大分类的使用率-由Deepseek产生
基于当前(2026年).NET开发生态的实际情况,这五大方法的使用率呈现出非常明显的两极分化趋势。 简单直接地回答:使用率高的只有两个,其他三个使用率极低,属于特定场景工具。 以下是具体的排名与解析…...
告别手机热点!实测特斯拉Model 3用USB无线网卡搭建‘永久’车载WiFi,看视频、OTA升级全搞定
特斯拉Model 3车载WiFi终极方案:告别流量焦虑与手机依赖 每次开车带家人出行时,后排的孩子总抱怨"视频又卡住了",而手机热点不仅耗电还经常断连——这可能是许多特斯拉车主的共同困扰。更尴尬的是,当车辆停在信号死角时…...
ARM GICv3虚拟化中断机制与优化实践
1. GICv3虚拟化中断处理机制概述在ARM虚拟化架构中,通用中断控制器(GIC)扮演着关键角色。GICv3作为第三代架构,引入了全面的虚拟化支持,使得虚拟机能够高效处理中断而无需Hypervisor的频繁介入。其核心设计理念是通过虚拟CPU接口(vCPU Interf…...
pkrelay:轻量级端口转发工具的设计原理与生产实践
1. 项目概述:一个轻量级、高可用的端口转发与流量中继工具在分布式系统、微服务架构以及混合云部署的日常运维和开发调试中,我们经常会遇到一个经典问题:如何安全、便捷地将一个网络环境中的服务端口,暴露给另一个网络环境访问&am…...

