当前位置: 首页 > 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…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...