当前位置: 首页 > news >正文

python---OpenCv(二),背景分离方法较有意思

目录

边界矩形

旋转矩形(最小外接矩形):

计算轮廓

找4个点的坐标

把浮点型转为Int

画轮廓

边界矩形--(最大外接矩形)

转灰度

找轮廓

找顶点

画矩形

显示

背景分离方法(这个很好玩,可以识别在动的物体)


边界矩形

有两种类型的边界矩形:

旋转矩形(最小外接矩形):

是用最小面积绘制的,所以它也考虑了旋转。使用的函数是cv.minAreaRect()。它返回一个Box2D结构,其中包含以下细节-(中心(x,y),(宽度,高度),旋转角度)。但要画出这个矩形,我们需要矩形的四个角。它由函数cv.boxPoints()获得

cv.minAreaRect()函数返回一个包含以下信息的 RotatedRect 对象:

  • center:矩形的中心坐标((x, y))。

  • size:矩形的尺寸((width, height))。

  • angle:矩形的旋转角度,取值范围为 -900 度。

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 的基本概念、安装、用法以及一个实际的示例&#xff0c…...

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 是视图与其他视图之间的空间。它定义了视图之间…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...