opencv--python(五)光流法/背景分割(MOG2)/腐蚀膨胀

2023-10-12 14:59

本文主要是介绍opencv--python(五)光流法/背景分割(MOG2)/腐蚀膨胀,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 光流法

光流:由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为光流。它是一个 2D 向量场,可以用来显示一个点从第一帧图像到第二 帧图像之间的移动。

光流是基于一下假设的:

  1. 在连续的两帧图像之间(目标对象的)像素的灰度值不改变。(/亮度不变)
  2. 相邻的像素具有相同的运动 。

结果:提取运动的物体

import cv2
import numpy as npcap = cv2.VideoCapture("vtest.avi")# 取出视频的第一帧
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)     # 为绘制创建掩码图片
hsv[...,1] = 255while(1):ret, frame2 = cap.read()next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)     #转为灰度图flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)  # 计算光流以获取点的新位置# 色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°# 饱和度S:取值范围为0.0~1.0# 亮度V:取值范围为0.0(黑色)~1.0(白色)mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])hsv[...,0] = ang*180/np.pi/2   #色调范围:0°~360°hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)cv2.imshow('frame2',rgb)k = cv2.waitKey(30) & 0xffif k == 27:breakelif k == ord('s'):cv2.imwrite('opticalfb.png',frame2)cv2.imwrite('opticalhsv.png',rgb)prvs = nextcap.release()
cv2.destroyAllWindows()

在这里插入图片描述
2.背景分割

结果:移动的物体会被标记为白色,背景会被标记为黑色的

import numpy as np
import cv2cap = cv2.VideoCapture('vtest.avi')fgbg = cv2.createBackgroundSubtractorMOG2()    #背景分割while(1):ret, frame = cap.read()fgmask = fgbg.apply(frame)    #应用cv2.imshow('frame',fgmask)k = cv2.waitKey(30) & 0xffif k == 27:breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

3.腐蚀和膨胀(开运算和闭运算)

1)腐蚀: cv2.erode()
作会把前景物体的边界腐蚀掉(但是前景仍然是白色)。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。 ------去噪声
2)膨胀: cv2.dilate()
与卷积核对应的原图像的像素值中只要有一个是 1,中心元 素的像素值就是 1。所以这个操作会增加图像中的白色区域(前景)。--------连接两个分开的物体。
3)开运算: cv2.morphologyEx()
先进性腐蚀再进行膨胀就叫做开运算。因为腐蚀在去掉白噪声的同时,也会使前景对象变小。所以我们再对他进行膨胀。这时噪声已经被去除了,不会再回来了,但是前景还在并会增加。
4)闭运算
先膨胀再腐蚀。它经常被用来填充前景物体中的小洞,或者前景物体上的 小黑点。

代码:

import cv2
import numpy as npimg = cv2.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)   #腐蚀
dilation = cv2.dilate(img,kernel,iterations = 1)   #膨胀
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  #开运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)   #闭运算

原图:
在这里插入图片描述
腐蚀:
在这里插入图片描述
膨胀:
在这里插入图片描述
开运算:
在这里插入图片描述
闭运算:
在这里插入图片描述

这篇关于opencv--python(五)光流法/背景分割(MOG2)/腐蚀膨胀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/196601

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: