(笔记七)利用opencv进行形态学操作
(1)程序清单
形态学操作是一种图像处理技术,它基于数学形态学理论,用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: LIFEI
@time: 2023/8/31 21:57
@file: test7.py
@project: pythonProject
@describe: CWNU
@# -------------------------------------------------(one)----------------------------------------------
@# -------------------------------------------------(two)----------------------------------------------
"""
# -------------------------------------------------(one)----------------------------------------------
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt# ..........................
# 程序清单
# 1、侵蚀和膨胀所需函数
# 内核的大小决定着对图像的操作程度大小,内核会在图像中滑动,当内核中全为1时才会变为1,否则为0
# 迭代次数决定着对图像的操作次数
# cv.erode() # 参数分别为原始图像、内核、迭代次数
# cv.dilate() # 参数分别为原始图像、内核、迭代次数# 2、形态学梯度、开运算、闭运算、顶帽、黑帽所需函数
# cv.morphologyEx() # 参数分别为原始图像、cv.MORPH_ + 方法名 、内核
# 运算方法分别有:
# cv.MORPH_GRADIENT # 形态学梯度
# cv.MORPH_OPEN # 开运算
# cv.MORPH_CLOSE # 闭运算
# cv.MORPH_TOPHAT # 顶帽
# cv.MORPH_BLACKHAT # 黑帽# 3、内核的形状确立方法
# cv.getStructuringElement() # 参数分别为cv.MORPH_ + 形状名、内核的大小
# 形状方法有:
# cv.MORPH_RECT # 矩形内核
# cv.MORPH_ELLIPSE # 椭圆内核
# cv.MORPH_CROSS # 十字内核
# ..........................
(2)算法实现
腐蚀操作通过将结构元素与图像进行逐像素的比较,将结构元素完全包含在图像中的区域保留下来,而其他区域则被腐蚀掉。这可以用于去除图像中的噪声、分离连接的物体以及缩小物体的大小。
膨胀操作与腐蚀操作相反,它通过将结构元素与图像进行逐像素的比较,将结构元素覆盖在图像上,从而扩大图像中的区域。这可以用于填充图像中的空洞、连接分离的物体以及增大物体的大小。
img = cv.imread(r"D:\data\test_img\test7.png")
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 内核
kernel = np.ones((5, 5), np.uint8)# 侵蚀操作
erosion = cv.erode(img, kernel, iterations=2) # iterations表示核运动迭代的次数# 膨胀操作
dilation = cv.dilate(img, kernel, iterations=2) # iterations表示核运动迭代的次数
plt.figure(1)
plt.subplot(131), plt.imshow(img), plt.title('ori img')
plt.subplot(132), plt.imshow(erosion), plt.title('erosion img')
plt.subplot(133), plt.imshow(dilation), plt.title('dilation img')
plt.show()
形态学操作还包括其他一些操作,如开运算、闭运算、顶帽运算和底帽运算。
开运算是先进行腐蚀操作,再进行膨胀操作,可以用于去除图像中的细小物体。闭运算是先进行膨胀操作,再进行腐蚀操作,可以用于填充图像中的小孔。
# 重新建立内核核
kernel2 = np.ones((11, 11), np.uint8)
# 开操作
# 假设噪声位于后景, 即在对象外面
open_img = cv.imread(r"D:\data\test_img\test7-7-7.png")
open_img = cv.cvtColor(open_img, cv.COLOR_BGR2RGB)
opening = cv.morphologyEx(open_img, cv.MORPH_OPEN, kernel2)# 闭操作
# 假设噪声位于前景, 即在对象里面
close_img = cv.imread(r"D:\data\test_img\test7-7.png")
close_img = cv.cvtColor(close_img, cv.COLOR_BGR2RGB)
closing = cv.morphologyEx(close_img, cv.MORPH_CLOSE, kernel2)
plt.figure(2)
plt.subplot(221), plt.imshow(open_img), plt.title('ori open_img')
plt.subplot(222), plt.imshow(opening), plt.title('opening')
plt.subplot(223), plt.imshow(close_img), plt.title('ori close_img')
plt.subplot(224), plt.imshow(closing), plt.title('closing')
plt.show()
顶帽运算是原始图像与开运算之差,底帽运算是闭运算与原始图像之差,它们可以用于提取图像中的细节信息。
# 形态学梯度
# 侵蚀与膨胀之间的差异, 可以用于提取对象的边界
gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)# 顶帽运算
# 即原始图像与开运算的差异, 用于提取噪声
hot_hat = cv.morphologyEx(open_img, cv.MORPH_TOPHAT, kernel2)# 黑帽运算
# 即原始图像与闭运算的差异,用于提取噪声
black_hat = cv.morphologyEx(close_img, cv.MORPH_BLACKHAT, kernel2)plt.figure(3)
plt.subplot(131), plt.imshow(gradient), plt.title('gradient img')
plt.subplot(132), plt.imshow(hot_hat), plt.title('hot_hat img')
plt.subplot(133), plt.imshow(black_hat), plt.title('black_hat img')
plt.show()
相关文章:

(笔记七)利用opencv进行形态学操作
(1)程序清单 形态学操作是一种图像处理技术,它基于数学形态学理论,用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…...

Spring是什么?
什么是Spring 我知道你现在可能迫不及待地想要开始编写Spring应用了。我向你保证,在本章结束之前,你肯定能够开发一个简单的Spring应用。但首先,我将使用Spring的一些基础概念为你搭建一个舞台,帮助你理解Spring是如何运转起来的…...

电梯SIP-IP五方对讲管理系统
电梯SIP-IP五方对讲管理系统 是深圳锐科达精心打磨的一款IP数字信号对讲设备,是在传统电梯对讲系统基础上的一次全新升级,突破了模拟、FM调频系统存在的技术障碍,实现联网;在模/数交替的过程中,继承了模拟、FM调频系统的优点&…...
leetcode283移动零
题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…...
Docker 部署SpringBoot项目,使用外部配置文件启动项目
一、Springboot项目引入配置文件的方式: 第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下; 第二种是直接把配置文件放到jar包的同级目录; 第三种在classpath下建一个config文件夹,然后…...

电子半导体行业电能质量监测与治理系统解决方案 安科瑞 许敏
摘要:在国家鼓励半导体材料国产化的政策导向下,本土半导体材料厂商不断提升半导体产品技术水平和研发能力,逐渐打破了国外半导体厂商的垄断格局,推进中国半导体材料国产化进程,促进中国半导体行业的发展。半导体产品的…...

pdfh5在线预览pdf文件
前言 pc浏览器和ios的浏览器都可以直接在线显示pdf文件,但是android浏览器不能在线预览pdf文件,如何预览pdf文件? Github: https://github.com/gjTool/pdfh5 Gitee: https://gitee.com/gjTool/pdfh5 使用pdfh5预览pdf 编写预览页面 <…...

Java智慧工地大数据中心源码
智慧工地技术架构:微服务JavaSpring Cloud VueUniApp MySql 智慧工地形成安全、质量、进度、人员、机械、绿色施工六大针对性解决方案。 安全管理 围绕重大危险源提供管控,可视化跟踪消防、安防、基坑、高支模、临边防护、卸料平台等设施设备的安全状态…...

关于人工智能的担忧
人工智能的快速发展引发了一系列关于其潜在风险和担忧的讨论。以下是一些常见的人们对人工智能的担忧: 失业问题:人工智能的出现可能会导致很多工作岗位的消失,特别是那些需要重复性劳动的工作。人们担心机器取代人类工作将导致大规模失业和社…...
JVM之强软弱虚引用
在Java虚拟机(JVM)中,有几种不同类型的引用,它们分别是:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用&am…...
Python编程练习与解答 练习98:一个数是素数吗
质数是大于1的整数,它只能被1和它本身整除。编写一个函数,来确定他的参数是不是质数,如果是,则返回True,否则返回False。编写一个main程序,从用户那里读取一个整数并显示一条消息,指示它是不是质…...

vue3+ts+uniapp实现小程序端input获取焦点计算上推页面距离
vue3tsuniapp实现小程序端input获取焦点计算上推页面距离 input获取焦点计算上推页面距离 1.先说我这边的需求2.发现问题3.解决思路4.代码展示 自我记录 1.先说我这边的需求 需求 1.给键盘同级添加一个按钮例如’下一步’ or ‘确认’ 这种按钮 2.初步想法就是获取input焦点时…...

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析
本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)加速科技杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼…...
Java入坑之Robot类
一、概述 1.1Robot类概述 在Java中,Robot是一个属于java.awt包的类。它还扩展了 Object 类。该类用于为测试自动化、自运行演示以及需要控制鼠标和键盘的其他应用程序生成本机系统输入事件。换句话说,我们使用 Java Robot 类来触发输入事件,…...

spring-secrity的Filter顺序+自定义过滤器
Filter顺序 Spring Security的官方文档向我们提供了filter的顺序,实际应用中无论用到了哪些,整体的顺序是保持不变的: ChannelProcessingFilter,重定向到其他协议的过滤器。也就是说如果你访问的channel错了,那首先就会在channel…...
leetcode 371. 两整数之和
异或:不同为1,相同为0,刚好符合加法,但是缺少进位的可能 按位与:只有都为1才为1,否则都为0,如果两个数按位与再左移一位,就能代表所有要进位的位 class Solution {public int getS…...

Medium: Where to Define Qualified users in A/B testing?
1. Common AB Testing Setup Issue (Framework) 局限性: unqualified users will also be considered and mess up experimentation results....
POJ 3662 Telephone Lines 二分,最小化第k大的数
一、题目大意 我们有n个点,p条边,最小化从1到n之间的路径的第k1大的数(当路径不超过k时就是0) 二、解题思路 我们首先用dijkstra过一遍,判断从1能不能到n,不能直接输出-1结束。 1能到达n的话࿰…...

【mybatis-plus进阶】多租户场景中多数据源自定义来源dynamic-datasource实现
Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现0.前言1. 作者提供了接口2. 基于此接口的抽象类实现自…...
vue3 async await
const getStruct async () > {//首先从store读取,否则通过接口获取if (store.state.struct.v ! null) {return store.state.struct.v;} else {const data await getStructApi();store.dispatch("struct/keepV", data).then(() > {console.log(&qu…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
宠物车载安全座椅市场报告:解读行业趋势与投资前景
一、什么是宠物车载安全座椅? 宠物车载安全座椅是一种专为宠物设计的车内固定装置,旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成,具备良好的缓冲性能,并可通过安全带或ISOFIX接口固定于车内。 近年来&…...

OpenHarmony标准系统-HDF框架之I2C驱动开发
文章目录 引言I2C基础知识概念和特性协议,四种信号组合 I2C调试手段硬件软件 HDF框架下的I2C设备驱动案例描述驱动Dispatch驱动读写 总结 引言 I2C基础知识 概念和特性 集成电路总线,由串网12C(1C、12C、Inter-Integrated Circuit BUS)行数据线SDA和串…...