当前位置: 首页 > news >正文

(笔记七)利用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()

69d450e1c631471fb8a3d6582c2cd6ef.png 

形态学操作还包括其他一些操作,如开运算、闭运算、顶帽运算和底帽运算。

开运算是先进行腐蚀操作,再进行膨胀操作,可以用于去除图像中的细小物体。闭运算是先进行膨胀操作,再进行腐蚀操作,可以用于填充图像中的小孔。

# 重新建立内核核
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()

fa30bb3bcfe446a7a621ace3008be66d.png 

顶帽运算是原始图像与开运算之差,底帽运算是闭运算与原始图像之差,它们可以用于提取图像中的细节信息。

# 形态学梯度
# 侵蚀与膨胀之间的差异, 可以用于提取对象的边界
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()

c74ee7a1ae654df3a90bbe5a8c0f24e1.png

 

相关文章:

(笔记七)利用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文件&#xff0c;但是android浏览器不能在线预览pdf文件&#xff0c;如何预览pdf文件&#xff1f; Github: https://github.com/gjTool/pdfh5 Gitee: https://gitee.com/gjTool/pdfh5 使用pdfh5预览pdf 编写预览页面 <…...

Java智慧工地大数据中心源码

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

关于人工智能的担忧

人工智能的快速发展引发了一系列关于其潜在风险和担忧的讨论。以下是一些常见的人们对人工智能的担忧&#xff1a; 失业问题&#xff1a;人工智能的出现可能会导致很多工作岗位的消失&#xff0c;特别是那些需要重复性劳动的工作。人们担心机器取代人类工作将导致大规模失业和社…...

JVM之强软弱虚引用

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;有几种不同类型的引用&#xff0c;它们分别是&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;、虚引用&am…...

Python编程练习与解答 练习98:一个数是素数吗

质数是大于1的整数&#xff0c;它只能被1和它本身整除。编写一个函数&#xff0c;来确定他的参数是不是质数&#xff0c;如果是&#xff0c;则返回True&#xff0c;否则返回False。编写一个main程序&#xff0c;从用户那里读取一个整数并显示一条消息&#xff0c;指示它是不是质…...

vue3+ts+uniapp实现小程序端input获取焦点计算上推页面距离

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

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;加速科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…...

Java入坑之Robot类

一、概述 1.1Robot类概述 在Java中&#xff0c;Robot是一个属于java.awt包的类。它还扩展了 Object 类。该类用于为测试自动化、自运行演示以及需要控制鼠标和键盘的其他应用程序生成本机系统输入事件。换句话说&#xff0c;我们使用 Java Robot 类来触发输入事件&#xff0c;…...

spring-secrity的Filter顺序+自定义过滤器

Filter顺序 Spring Security的官方文档向我们提供了filter的顺序&#xff0c;实际应用中无论用到了哪些&#xff0c;整体的顺序是保持不变的: ChannelProcessingFilter&#xff0c;重定向到其他协议的过滤器。也就是说如果你访问的channel错了&#xff0c;那首先就会在channel…...

leetcode 371. 两整数之和

异或&#xff1a;不同为1&#xff0c;相同为0&#xff0c;刚好符合加法&#xff0c;但是缺少进位的可能 按位与&#xff1a;只有都为1才为1&#xff0c;否则都为0&#xff0c;如果两个数按位与再左移一位&#xff0c;就能代表所有要进位的位 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个点&#xff0c;p条边&#xff0c;最小化从1到n之间的路径的第k1大的数&#xff08;当路径不超过k时就是0&#xff09; 二、解题思路 我们首先用dijkstra过一遍&#xff0c;判断从1能不能到n&#xff0c;不能直接输出-1结束。 1能到达n的话&#xff0…...

【mybatis-plus进阶】多租户场景中多数据源自定义来源dynamic-datasource实现

Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多租户场景中多数据源自定义来源dynamic-datasource实现0.前言1. 作者提供了接口2. 基于此接口的抽象类实现自…...

vue3 async await

const getStruct async () > {//首先从store读取&#xff0c;否则通过接口获取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…...

GraphViz+CANdelaStudio实战:如何可视化你的State Diagram状态转换图

GraphVizCANdelaStudio实战&#xff1a;如何可视化你的State Diagram状态转换图 在汽车电子开发领域&#xff0c;状态机的设计和验证是核心工作之一。当你在CANdelaStudio中精心设计了复杂的状态转换逻辑后&#xff0c;如何让这些抽象的状态关系变得直观可理解&#xff1f;这就…...

MHY_Scanner:米哈游游戏毫秒级扫码登录的终极解决方案

MHY_Scanner&#xff1a;米哈游游戏毫秒级扫码登录的终极解决方案 【免费下载链接】MHY_Scanner MHY扫码登录器&#xff0c;支持从直播流抢码。 项目地址: https://gitcode.com/gh_mirrors/mh/MHY_Scanner 在游戏直播抢码的激烈竞争中&#xff0c;传统手动扫码登录面临着…...

Harness 中的事务边界定义:微事务与补偿

Harness 中的事务边界定义:微事务与补偿 引言 核心概念铺垫 在开始本文的核心内容——Harness 中的事务边界定义与微事务/补偿实践体系——之前,我们需要先锚定一组贯穿全文的、与 CI/CD 交付流水线强绑定的专属术语与业务通用术语的融合定义: 交付事务(Delivery Transac…...

虚拟机检测工具VMDE深度解析与实战指南

虚拟机检测工具VMDE深度解析与实战指南 【免费下载链接】VMDE Source from VMDE paper, adapted to 2015 项目地址: https://gitcode.com/gh_mirrors/vm/VMDE 揭示VMDE的核心价值 在虚拟化技术广泛应用的今天&#xff0c;准确识别系统运行环境的真实性变得至关重要。虚…...

2026最权威的十大AI辅助写作助手解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现今&#xff0c;人工智能辅助论文写作在学术研究里已渐渐变成常见的手段&#xff0c;当前&a…...

3分钟掌握B站无损音频下载:BilibiliDown新手必看指南

3分钟掌握B站无损音频下载&#xff1a;BilibiliDown新手必看指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi…...

2026届毕业生推荐的十大AI辅助论文平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内&#xff0c;论文AI工具已然变成提高研究效率的关键辅助法子。当下主流工…...

Java8时间魔法:Duration与Period实战,精准掌控时间与日期间隔

1. Duration与Period&#xff1a;Java8的时间魔法棒 第一次接触Java8的日期时间API时&#xff0c;我被LocalDate和LocalDateTime的简洁惊艳到了。但真正让我感受到时间魔法魅力的&#xff0c;是在处理两个时间点间隔时遇到的Duration和Period。记得有次做会员系统&#xff0c;…...

Mem Reduct终极指南:一键释放内存,让你的Windows电脑飞起来

Mem Reduct终极指南&#xff1a;一键释放内存&#xff0c;让你的Windows电脑飞起来 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/m…...

告别Python!用C语言和llama.cpp API打造你的第一个本地大模型应用(附完整代码)

从Python到C语言&#xff1a;用llama.cpp构建高性能大模型推理引擎 当Python成为大模型开发的主流选择时&#xff0c;性能瓶颈也随之而来。对于需要低延迟、高吞吐的生产环境&#xff0c;C语言的性能优势开始显现。本文将带你从零开始&#xff0c;用llama.cpp的C API构建一个完…...