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

news2024/10/6 14:28:24

目录

边界矩形

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

计算轮廓

找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 cv2

cap = 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

效果:过于离谱就不展示了,只要动的地方就会变白,视频哈

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高项目风险的处理效率?5个重点

提高项目风险的处理效率,有助于迅速识别和应对风险,减少风险导致的延误,降低成本,提升项目质量,确保项目按时交付。如果项目风险处理效率较低,未能及时发现和处理风险,导致问题累积,…

文化财经wh6boll带macd多空转折点提示指标公式源码

文化财经wh6boll带macd多空转折点提示指标公式源码: DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA); MID:MA(CLOSE,26);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:STD(CLOSE,26);//求M个周期内的收盘价的标准差 …

【计算机网络体系结构】计算机网络体系结构实验-www服务器配置管理实验

一、实验内容 www服务器配置管理, wireshark数据包分析 二、实验目的 1. 了解WWW服务的体系结构与工作原理,掌握利用Microsoft的IIS实现WWW服务的基本配置,掌握WEB站点的管理 2. 利用Wireshark抓取http数据包进行分析。运行软件Wireshark…

ARM 240625

练习: 汇编实现1-100累加,结果保存在r0 .text 声明下面内容都属于文本段内容 .globl _start 声明 _start 是一个全局启用的标签_start: 封装 _start 标签,汇编的标签和C中函数类似mov r0,#0 mov 把0 搬运到 r0 寄存器mov r1,#1 mov 把1 …

postman汉化中文(Windows)

Postman 是一款专业的 API 开发工具,为开发者提供了创建、测试、调试和分享 HTTP 请求的便利性和灵活性。其主要功能包括请求构建与发送、自动化测试、团队协作与分享、实时监视与调试以及环境与变量管理。无论是个人开发者还是团队,Postman 都能有效地提…

Fragment与ViewModel(MVVM架构)

简介 在Android应用开发中,Fragment和ViewModel是两个非常重要的概念,它们分别属于架构组件库的一部分,旨在帮助开发者构建更加模块化、健壮且易维护的应用。 Fragment Fragment是Android系统提供的一种可重用的UI组件,它能够作为…

【第14章】探索新技术:如何自学SD3模型(找官方资料/精读/下载/安装/3款工作流/效果测试)ComfyUI基础入门教程

近期,也就是2024年6月12日,StabilityAI开源了最新的SD3模型的2B版本,而神奇的是,ComfyUI早在6月11号就已经适配了SD3!相比之下,SD WebUI 的更新速度却远远落后... 所以,如果想要尝试一些AI绘画领域的新技术,ComfyUI是一个非常值得投入时间学习的工具。 这节课,我们就…

Ascend基于自定义算子工程的算子开发

环境准备 见https://gitee.com/zaj1414904389/ascend-tutorial.git 工程创建 CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成Ascend C算子开发工程 [{"op": "AddCustom","input_desc": [{"name…

2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (2)———— 作者:LJS

目录 4.5 DNS记录类型介绍(A记录、MX记录、NS记录等,TXT,CNAME,PTR) 4.5.1 DNS 4.5.2 A记录 4.5.3NS记录 4.5.4 MX记录 4.5.5 CNAME记录 4.5.6 TXT记录 4.5.7 泛域名与泛解析 4.5.8域名绑定 4.5.9 域名转向 4.6 Mysql报错注入之floor报错详解…

基于Java影院管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

若依框架自定义左侧导航栏图标,并变色

若依框架中,有时候设计图跟若依框架自带的图标不一样,需要替换掉,问题来了,怎么替换,并变色? 1、设计师给的图标的路径必须是合并的,非多个路径,这样我们下载下来的svg图才有只有一个…

msvcr110.dll丢失的解决方法,亲测有效的几种解决方法

最近,我在启动一个程序时,系统突然弹出一个错误提示,告诉我电脑缺失了一个名为msvcr110.dll的文件。这让我感到非常困惑,因为我之前从未遇到过这样的问题。经过一番搜索和尝试,我总结了5种靠谱的解决方法。下面分享给大…

平凉小果子,平凡中的惊艳味道

平凉美食小果子,这看似平凡的名字背后,藏着无数平凉人的美好回忆。它不仅仅是一种食物,更是一种情感的寄托,一种文化的传承。小果子的制作过程看似简单,实则蕴含着深厚的功夫。选用优质的面粉作为主要原料,…

vue3-openlayers 要素聚合(cluster)、icon聚合

本篇介绍一下使用vue3-openlayers 要素聚合&#xff08;cluster&#xff09;&#xff0c;icon聚合 1 需求 要素聚合&#xff08;cluster&#xff09;&#xff0c;icon聚合 2 分析 使用ol-source-cluster 4 实现 <template><ol-map:loadTilesWhileAnimating"…

Redis数据库(五):Redis数据库基本特性

这一节我们来介绍如何使用C语言的库来操作Redis数据库。 目录 一、hiredis的安装 1.1 下载源码 1.2 解压 1.3 进入hiredis路径下 1.4 利用makefile文件进行编译 二、接口介绍 三、C程序操作Redis代码 四、redis.conf配置文件详解 五、Redis的持久化 5.1 RDB &#x…

优思学院|精益生产3大特征、5个步骤、8大浪费、10大工具

前言 精益生产作为一种先进的生产管理理念&#xff0c;起源于丰田汽车公司的生产方式&#xff0c;其核心在于消除浪费、优化流程&#xff0c;以最少的投入获取最大的产出。本文将详细解析精益生产的三大特征、五个步骤、八大浪费和十大工具&#xff0c;帮助读者深入理解这一理…

【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven项目源代码+文档

1项目功能 【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven 项目设计源代码 文档 期末小组作业 2项目介绍 系统功能&#xff1a; 学生作业管理系统包括管理员、小管理员、教师、学生四种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、学…

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…

vue封装原生table表格方法

适用场景&#xff1a;有若干个表格&#xff0c;前面几列格式不一致&#xff0c;但是后面几列格式皆为占一个单元格&#xff0c;所以需要封装表格&#xff0c;表格元素自动根据数据结构生成即可&#xff1b;并且用户可新增列数据。 分类&#xff1a; 固定数据部分 就是根据数据…

合合信息智能文档抽取:赋能不良资产管理行业的数字化转型

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 随着数字化浪潮的汹涌澎湃&#xff0c;全球各行各业正经历着前所未有的变革。人工智能技术的快速发展&#xff0c;以其独特的创新能力和应用潜力&#xff0c;正在深刻地改变着业务模式&#xff0c;推动产业效率的…