3.2.OpenCV技能树--二值图像处理--图像腐蚀与膨胀
文章目录
- 1.文章内容来源
- 2.图像膨胀处理
- 2.1.图像膨胀原理简介
- 2.2.图像膨胀核心代码
- 2.3.图像膨胀效果展示
- 3.图像腐蚀处理
- 3.1.图像腐蚀原理简介
- 3.2.图像腐蚀核心代码
- 3.3.图像腐蚀效果展示
- 4.易错点总结与反思
1.文章内容来源
1.题目来源:https://edu.csdn.net/skill/practice/opencv-43cb627865154bb69eaad017845e8944/8295?language=opencv&materialId=20783
2.资料来源:https://edu.csdn.net/skill/opencv/opencv-43cb627865154bb69eaad017845e8944?category=658
2.图像膨胀处理
2.1.图像膨胀原理简介
图像膨胀原理:
膨胀过程是有一个结构元素或者模板去在原图像素比对.
当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
如下图。由于将周围的最大值去代替中心值,所膨胀的就是白色(高亮部分)膨胀函数解析:
膨胀函数cv2.dilate(img,kernel,iterations)
1.img:原图像
2.kernel:指膨胀操作的内核,默认3x3的卷积核,也可以自己选择修改。
3.iterations:迭代次数,默认为1.
2.2.图像膨胀核心代码
import cv2
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def dilate_example(image):#图像灰度化处理gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#图像阈值化处理ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)#设定卷积核函数kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))dst = cv2.dilate(binary, kernel)#图像膨胀处理figure=[image,gray,binary, dst]title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'膨胀化图像']for i in range(4):plt.subplot(1,4,i+1)plt.imshow(figure[i],'gray')plt.title(title[i])plt.xticks([])plt.yticks([])plt.show()if __name__=='__main__':img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")dilate_example(img)cv2.waitKey(0)cv2.destroyAllWindows()
2.3.图像膨胀效果展示

3.图像腐蚀处理
3.1.图像腐蚀原理简介
图像腐蚀原理:
腐蚀过程是有一个结构元素或者模板去在原图像素比对.
当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
如下图。由于将周围的最大值去代替中心值,所腐蚀的就是白色(高亮部分),高亮部分会变黑.腐蚀函数解析:
腐蚀函数:cv2.erode(img,kernel,iterations)
1.img:原图像
2.kernel:指腐蚀操作的内核,默认3x3的卷积核,也可以自己选择修改。
3.iterations:迭代次数,默认为1.
3.2.图像腐蚀核心代码
import cv2
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def dilate_example(image):#图像灰度化处理gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#图像阈值化处理ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)#设定卷积核函数kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))dst = cv2.erode(binary, kernel)#图像腐蚀处理figure=[image,gray,binary, dst]title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'腐蚀化图像']for i in range(4):plt.subplot(1,4,i+1)plt.imshow(figure[i],'gray')plt.title(title[i])plt.xticks([])plt.yticks([])plt.show()if __name__=='__main__':img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")dilate_example(img)cv2.waitKey(0)cv2.destroyAllWindows()
3.3.图像腐蚀效果展示

4.易错点总结与反思
易错点反思与总结:
1.膨胀函数:cv2.dilate(img,kernel,iterations),每一个参数就算是默认也要写出来!!
2.腐蚀函数:cv2.erode(img,kernel,iterations),每一个参数就算是默认也要写出来!!
3.腐蚀和膨胀是对白色部分而言的,原先黑色部分的处理没有影响。
4.kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (x, x))可以根据自己意愿设定卷积核。
相关文章:
3.2.OpenCV技能树--二值图像处理--图像腐蚀与膨胀
文章目录 1.文章内容来源2.图像膨胀处理2.1.图像膨胀原理简介2.2.图像膨胀核心代码2.3.图像膨胀效果展示 3.图像腐蚀处理3.1.图像腐蚀原理简介3.2.图像腐蚀核心代码3.3.图像腐蚀效果展示 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.csdn.net/skill/practice/o…...
基于FPGA的数字时钟系统设计
在FPGA的学习中,数字时钟是一个比较基础的实验案例,通过该实验可以更好的锻炼初学者的框架设计能力以及逻辑思维能力,从而打好坚实的基本功,接下来就开始我们的学习吧! 1.数码管介绍 数码管通俗理解就是将8个LED(包含…...
linux centos Python + Selenium+Chrome自动化测试环境搭建?
在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境,需要执行以下步骤: 1、安装 Python CentOS 7 自带的 Python 版本较老,建议使用 EPEL 库或源码安装 Python 3。例如,使用 EPEL 库安装 Python 3: sud…...
mysql面试题20:有哪些合适的分布式主键方案
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:有哪些合适的分布式主键方案? UUID:UUID通常是由一个二进制的128位整数表示,可以保证全局的唯一性。在Java中,可以通过UUID类生成一个UUID。例…...
git的基础操作
https://blog.csdn.net/a18307096730/article/details/124586216?spm1001.2014.3001.5502 1:使用场景 SVN,如果服务器里面的东西坏掉了,那么就全线崩盘了。 1:基本配置 git config --global user.name “luka” (自己的名字就行) git co…...
lua 中文字符的判断简介
一般在工作中会遇到中文字符的判断、截断、打码等需求,之前一直没有总结,虽然网上资料也多,今天在这里简单的总结一下。 1 .UTF-8简单描述 UTF-8 是 Unicode 的实现方式之一,其对应关系(编码规则)如下表所…...
SSM-XML整合
SSM-XML整合 核心配置文件 maven坐标 <dependencies><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!--数据…...
线性代数小例子
这样做有什么问题呢: A 2 A > A ( A − E ) 0 > A E A 0 A^2 A > A(A - E) 0> A E \quad A 0 A2A>A(A−E)0>AEA0 上述做法是错误的,这是因为两个矩阵的乘积结果为0,并不能说明这两个矩阵就是0,即上述…...
ASP.NET Core 开发 Web API
2. Web Api 的创建与Http类型的介绍 2.1 ASP.Net Core Web API项目的创建 1.创建ASP.NET Core Web API项目 从“文件”菜单中选择“新建”“项目”。 在搜索框中输入“Web API”。 选择“ASP.NET Core Web API”模板,然后选择“下一步”。 在“配置新项目”对话框中…...
QImage函数setAlphaChannel
最近使用QImage的函数setAlphaChannel时遇到了一个坑,花了不少时间才弄清楚:在使用这个函数后,图像格式都会变成QImage::Format_ARGB32_Premultiplied。 先看下setAlphaChannel在帮助文档的说明: void QImage::setAlphaChannel(…...
区块链、隐私计算、联邦学习、人工智能的关联
目录 前言 1.区块链 2.隐私计算 3.联邦学习(隐私计算技术) 4.区块链和联邦学习 5.区块链和人工智能 展望 参考文献 前言 区块链公开透明,但也需要隐私,人工智能强大,但也需要限制。当前我们需要的是一个在保证…...
Unity可视化Shader工具ASE介绍——4、ASE的自定义模板使用
大家好,我是阿赵。 继续介绍Unity可视化Shader编辑工具ASE。之前的文章介绍了在ASE里面可以选择不同的Shader类型。这一篇来继续探讨一下,这些Shader类型究竟是什么。 一、所谓的Shader类型是什么 选择不同的Shader类型,会出现不同的选项…...
FastAPI学习-22.response 异常处理 HTTPException
前言 某些情况下,需要向客户端返回错误提示。 这里所谓的客户端包括前端浏览器、其他应用程序、物联网设备等。 需要向客户端返回错误提示的场景主要如下: 客户端没有执行操作的权限客户端没有访问资源的权限客户端要访问的项目不存在等等 … 遇到这些…...
75.颜色分类
原地排序:空间复杂度为1 class Solution { public:void sortColors(vector<int>& nums) {if(0){//法一:单指针两个遍历int nnums.size();int ptr0;for(int i0;i<n;i){if(nums[i]0){swap(nums[i],nums[ptr]);ptr;}}for(int iptr;i<n;i){…...
浅谈分散式存储项目MEMO
Memo本质上是互联网项目,应用了一些区块链技术而已,或者叫做包了层区块链皮的互联网项目。 最开始对标Filcoin,后来发现Filcoin也有问题,分布式存储解决方案并不完美,抑或者是自己团队的研发能力无法与IPFS团队PK&…...
ansible角色运行指定角色路径
众所周知ansible默认角色路径为:/usr/share/ansible/roles目录 而用户默认安装角色路径为$HOME/.ansible/roles/目录。 如果我们不想修改ansible配置文件又想在任意目录基于运行角色部署服务,需要在ansible剧本中 指定角色路径。 分享剧本如下&#x…...
【数据结构-字符串 三】【字符串转换】字符串解码
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【字符串转换】,使用【字符串】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
LabVIEW中不同颜色连线的含义
LabVIEW中不同颜色连线的含义 LabVIEW中的连线具有不同的颜色,样式和宽度。每个都代表了什么? 下表列出了常见的连线类型: 相关信息 请注意,类的连线颜色是可更改的。该表显示其默认外观。 连线用于在程序框图各对象间传递数据…...
如何才能在Ubuntu系统部署RabbitMQ服务器并公网访问
在Ubuntu系统上部署RabbitMQ服务器并公网访问,可以按照以下步骤进行: 安装RabbitMQ服务器: 在终端中输入以下命令安装RabbitMQ服务器: sudo apt-get update sudo apt-get install rabbitmq-server启动RabbitMQ服务器: …...
PCL点云处理之使用变换矩阵对点云去中心化(二百零七)
PCL点云处理之使用变换矩阵对点云去中心化(二百零七) 一、算法介绍二、算法实现1.代码2.效果三、总结一、算法介绍 点云去中心化是点云处理中的一种常见操作,借助PCL可以很快实现这一处理,具体处理步骤如下 1、计算点云中心,这个有现成函数直接调用 2、构建偏移变换矩阵,…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
