6.Opencv-图像腐蚀、膨胀(开运算,闭运算)

news2025/2/8 10:29:27

1.图像腐蚀

这个操作会把前景物体的边界腐蚀掉。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的图像的所有像素值都是1,那么该区域的所有像素值就是1,否则为0。用于去除白噪声和断开两个连在一起的物体等。

语法:cv2.erode(img,kernel,iterations=1)

img:表示输入图像。

kernel:表示定义的卷积核。

iterations:表示迭代腐蚀的次数,通俗的说就是腐蚀多少次。

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)

#腐蚀操作 将有价值的信息缩小
kernel=np.ones((30,30),np.uint8)
erode1=cv2.erode(img,kernel,iterations=1) #迭代次数1
erode2=cv2.erode(img,kernel,iterations=2) #迭代次数2
erode3=cv2.erode(img,kernel,iterations=3) #迭代次数3

res=np.hstack((img,erode1,erode2,erode3))
cv2.imshow('erode', res)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

运行效果

 2.图像膨胀

语法:cv2.dilate(img,kernel,iterations=2)

img:表示输入图像。

kernel:表示定义的卷积核。

iterations:表示迭代腐蚀的次数,通俗的说就是腐蚀多少次。

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)

#膨胀操作 将有价值的信息放大
kernel=np.ones((30,30),np.uint8)
dilate1=cv2.dilate(img,kernel,iterations=1) #迭代次数1
dilate2=cv2.dilate(img,kernel,iterations=2) #迭代次数2
dilate3=cv2.dilate(img,kernel,iterations=3) #迭代次数3

res2=np.hstack((img,dilate1,dilate2,dilate3))
cv2.imshow('dilate', res2)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

运行效果

 3.开运算:先腐蚀,再膨胀

语法:cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)

#开运行:先腐蚀,再膨胀
kernel=np.ones((30,30),np.uint8)
open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('open', open)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

 

 

 4.闭运算:先膨胀,再腐蚀

语法:cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
 
#闭运算:先膨胀,再腐蚀
kernel=np.ones((30,30),np.uint8)
close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('close', close)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

 5.梯度、礼帽、黑帽

梯度=膨胀-腐蚀(cv2.MORPH_GRADIENT)

礼帽=原始输入-开运算结果(cv2.MORPH_TOPHAT)

黑帽=闭运算结果-原始输入(cv2.MORPH_BLACKHAT)

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
 
#梯度=膨胀-腐蚀
kernel=np.ones((5,5),np.uint8)
gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient', gradient)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

#礼帽=原始输入-开运算结果
kernel=np.ones((5,5),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat', tophat)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

#黑帽=闭运算结果-原始输入
kernel=np.ones((5,5),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat', blackhat)  
cv2.waitKey(0)        
cv2.destroyAllWindows()

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

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

相关文章

剑走偏锋,无头浏览器是什么神奇的家伙

大家好,我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态。 我的个人网站:古时的风筝 浏览器是再熟悉不过的东西了,几乎每个人用过,比如 Chrome、FireFox、Safari,尤其是我们程序员&a…

ASEMI代理台湾光宝LTV-3120光耦合器中文资料

编辑-Z LTV-3120是一种高性能光耦,由于其可靠性、效率和多功能性,在各种应用中都很受欢迎。本文将全面了解LTV-3120其功能、应用以及它如何改进您的电子设计。 什么是光电耦合器? 光耦,也称为光隔离器,是一种利用光在…

时序数据库的流计算支持

一、时序数据及其特点 时序数据(Time Series Data)是基于相对稳定频率持续产生的一系列指标监测数据,比如一年内的道琼斯指数、一天内不同时间点的测量气温等。时序数据有以下几个特点: 历史数据的不变性数据的有效性数据的时效…

Linux:cp、mv、rm命令

1、cp命令:用于复制文件/文件夹,语法: cp [-r] 参数1 参数2 r参数可选,用于对文件夹进行复制,表示递归 参数1:Linux路径,表示被复制的文件或文件夹 参数2:Linux,表示要复…

数据库期末复习第一章(看完包过)

目录 第一章 第一章 主要是一些概念,了解几个基本概念,并且记住英文缩写 DB是数据库(database) 0.数据 Data 1.数据库 DB (database 数据库) 2.数据库管理系统 DBMS (M:mange 管…

论文解读 | 基于蒙特卡罗树搜索的触觉目标识别主动末端执行器姿态选择

原创 | 文 BFT机器人 本论文提出了一种新颖的方法,使用仅触觉来进行主动物体识别。该算法通过蒙特卡罗树搜索来选择最佳的手腕姿态序列进行物体识别。 具体来说,该算法将问题建模为马尔可夫决策过程(MDP),并通过观察和…

记一次简单的SQL调优

记一次简单的SQL调优 前言排查分析问题分析SQL的执行流程存在的问题优化思路 验证解决验证执行流程一些执行计划的基本知识 优化先执行where条件过滤不需要的行,再进行左连接提示排序走索引为常用查询条件创建索引调整查询条件的顺序 前言 相信大家对后端数据库的S…

【Uniapp】小程序携带Token请求接口+无感知登录方案2.0

本次改进原文《【Uniapp】小程序携带Token请求接口无感知登录方案》,在实际使用过程中我发现以下bug: 若token恰好在用户访问接口时到期,就会直接查询为空,不反映token过期问题(例如:弹窗显示订单查询记录…

使用python脚本将视频素材转化为图片数据集并打标

1.前言 在深度学习的训练过程中,第一步要做的制作数据集。本文所介绍的内容就是在面临视频素材时,如何将这个视频素材转换成图片,并将生成的图片给打上标签。 2.视频转图片的代码展示 # codingutf-8 import cv2 import osroot "F:\H…

MySQL数据库及基础操作

MySQL数据库 一、数据库的基本概念二、数据库发展史1、第一代数据库2、第二代数据库3、第三代数据库 三、当今主流数据库介绍四、关系型数据库1、结构2、理解关系数据库 五、非关系数据库六、数据库基本操作1、常用的数据类型2、查看数据库结构3、SQL语句3.1 DDL3.2 DML3.3 DQL…

pycharm 命令行创建版本库

pycharm中已建好的项目如何上传自已的git服务器中 通过命令行创建一个新的版本库 touch README.mdgit initgit add README.mdgit commit -m "first commit"git remote add origin ssh://XXXXip:29418/newbb.gitgit push -u origin master 通过命令行推送一个已存在的…

数据挖掘课件01-07

1、数挖的定义、产生原因,解决问题 数据挖掘就是寻找数据中隐含的知识并用于产生商业价值。 数据挖掘产生动因:海量数据、维度众多、问题复杂 解决问题:分类问题,聚类问题、回归问题、关联问题、 分类算法:C4.5&…

微信如何设置快速回复?

目前微信线上沟通已经成为绝大多数人士的首选,尤其不管是企业还是个人,都会利用微信打造私域。而做微信沟通的话,大家最为关心的就是怎么做到最快捷的回复对方。 可以看看这个功能,提前设置好常见问题的回复话术,可个…

JS + 浮动 + 递归实现图片瀑布流懒加载

思路 页面 pege 分成左浮动的数列 lineBox,每列中图片 sinImg 依次向下摆放每加载一张图片时,判断页面中哪列的高度最小,将当前图片放到最小的那列尾部监听当前图片 onload 事件,当前图片加载完成后,再加载下一张图片…

【python】前方弹幕高能:教你一键实现自动化指定直播间发送弹幕,为你喜欢的女主播疯狂打call叭~

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 不知道你们平时看不看直播,每次看到界面中的滚动弹幕,还挺有意思。 无中生事—— 前几天看到喜欢的主播打比赛呢~ 精彩时刻恨不得双手打字打call的飞快,那激动的无语轮次了都&#…

Android生态下的Kotlin有哪些更新#GoogleIO 2023

Android生态下Kotlin有哪些更新#GoogleIO 2023 自Android官方宣布Kotlin作为Android开发的第一语言,过去将近6年时间。下面是GoogleIO 2023宣布的Android生态的4项重要更新。 Kotlin编译器2.0版本 如果你是一位Kotlin开发者,你可能会对听到这个消息感…

PMP®增持CSPM-2等级证书,免重新考试与学习,申请简单!

好消息!好消息!好消息! 2023年起,持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2,不用重新考试,不用重新学习,原PMP证书不影响正常使用,相当于多了一个国标项目管理领域的证书…

前端和后端分别是什么?

从技术工具来看: 前端:常见的 html5、JavaScript、jQuery... 后端:spring、tomcet、JVM,MySQL... 毕竟,如果这个问题问一个老后端,他掰掰手指可以给你罗列出一堆的名词来,比如设计模式、数据库…

Golang gin middleware的编写与使用 context.Next函数

中间件 在web应用服务中,完整的一个业务处理在技术上包含客户端操作、服务器端处理、返回处理结果给客户端三个步骤。 在实际的业务开发和处理中,会有更负责的业务和需求场景。一个完整的系统可能要包含鉴权认证、权限管理、安全检查、日志记录等多维度…

【软件分析/静态分析】chapter3 课程03/04 数据流分析的应用(Data Flow Analysis)

🔗 课程链接:李樾老师和谭天老师的:南京大学《软件分析》课程03(Data Flow Analysis I)_哔哩哔哩_bilibili 南京大学《软件分析》课程04(Data Flow Analysis II)_哔哩哔哩_bilibili 这篇文章总结…