形态学图像处理

首先自己随便写了一个单词,然后在周围画一些相对细一点的噪声。

# 读取原始图片
original = cv2.imread("romance.jpg")
# 构造一个全1的5*5矩阵
kernel = np.ones((5, 5), np.int8)

 腐蚀

腐蚀(Erosion)是形态学图像处理中的一种基本操作,用于缩小图像中物体的边界。它的基本思想是用一个结构元素(structuring element)在图像上滑动,如果结构元素的所有像素与图像中的相应像素都匹配,则将结构元素的原点放置在当前像素位置。如果有任何一个像素不匹配,则将当前像素置为零(或者最小值),以使物体边界向内收缩。用于去除图像中的小对象、连接组件、细节等。

(𝐴⊖𝐵)(𝑥,𝑦)=min⁡(𝑖,𝑗)∈𝐵[𝐴(𝑥+𝑖,𝑦+𝑗)](A⊖B)(x,y)=min(i,j)∈B​[A(x+i,y+j)]

# 进行腐蚀操作
erosion = cv2.erode(original, kernel, iterations=1)

膨胀

膨胀(Dilation)是形态学图像处理中的另一种基本操作,与腐蚀相反,它用于增加图像中物体的边界。膨胀操作的基本思想是用一个结构元素在图像上滑动,如果结构元素的任何一个像素与图像中的相应像素匹配,则将结构元素的原点放置在当前像素位置,并将结构元素的所有像素与图像中的相应像素进行合并。这样,图像中的物体边界就会向外扩张。用于填充物体的孔洞、连接断开的组件、增加物体的大小等。

(𝐴⊕𝐵)(𝑥,𝑦)=max⁡(𝑖,𝑗)∈𝐵[𝐴(𝑥+𝑖,𝑦+𝑗)](A⊕B)(x,y)=max(i,j)∈B​[A(x+i,y+j)]

# 进行膨胀操作
dilate = cv2.dilate(original, kernel)

开运算

开运算(Opening)是形态学图像处理中的一种组合操作,由腐蚀操作和膨胀操作组成。它的基本思想是先对图像进行腐蚀操作,然后再对结果进行膨胀操作。开运算的主要作用是消除图像中的小物体、连接小的间隙以及平滑物体边界。用于去除图像中的小的白色噪声,同时保持物体的整体形状,也可以用于分割图像中的物体,并且能够在一定程度上保持物体的大小和形状不变。

Opening(A)=(A⊖B)⊕B

# 开运算
opening = cv2.morphologyEx(original, cv2.MORPH_OPEN, kernel)

闭运算

闭运算(Closing)是形态学图像处理中的另一种组合操作,也由腐蚀操作和膨胀操作组成,与开运算相反。闭运算的基本思想是先对图像进行膨胀操作,然后再对结果进行腐蚀操作。闭运算的主要作用是填充图像中的小洞、连接断开的物体以及平滑物体边界。用于去除图像中的小的黑色噪声,同时保持物体的整体形状,也可以用于填充图像中的空洞,并且能够在一定程度上保持物体的大小和形状不变。

Closing(A)=(A⊕B)⊖B

# 闭运算
closed = cv2.morphologyEx(original, cv2.MORPH_CLOSE, kernel)

梯度运算

梯度运算是形态学图像处理中的一种操作,用于检测图像中物体边界的位置。梯度运算通过计算图像的膨胀和腐蚀之间的差异来实现。具体来说,梯度运算的结果是原始图像与经过膨胀后图像的差异。用于检测物体的边缘或轮廓,并且可以帮助定位物体的位置和形状。通常,边界处的梯度值较大,而物体内部的梯度值较小。

Gradient(𝐴)=(𝐴⊕𝐵)−(𝐴⊖𝐵)Gradient(A)=(A⊕B)−(A⊖B)

# 梯度运算
gradient = cv2.morphologyEx(original, cv2.MORPH_GRADIENT, kernel)

礼帽

礼帽(Top Hat)是形态学图像处理中的一种操作,用于提取图像中的小细节或微弱的特征。礼帽运算可以将图像中的明亮区域和背景相比较,从而突出显示出与背景相比较明显的亮度变化。用于检测图像中的小物体、微小的结构变化、或者噪声等。

TopHat(A)=A−(Opening(A))

# 礼帽
tohat = cv2.morphologyEx(original, cv2.MORPH_TOPHAT, kernel)

黑帽

黑帽(Black Hat)运算是形态学图像处理中的一种操作,与礼帽运算相对应。黑帽运算用于提取图像中的暗区域或微弱的特征。与礼帽运算类似,黑帽运算可以将图像中的暗区域与背景相比较,从而突出显示出与背景相比较明显的暗度变化。用于检测图像中的小的暗物体、微小的结构变化、或者噪声等。

BlackHat(𝐴)=(Closing(𝐴))−𝐴BlackHat(A)=(Closing(A))−A

# 黑帽
blackhat = cv2.morphologyEx(original, cv2.MORPH_BLACKHAT, kernel)

import cv2
import numpy as np

# 读取原始图片
original = cv2.imread("romance.jpg")
# 构造一个全1的5*5矩阵
kernel = np.ones((5, 5), np.int8)
# 进行腐蚀操作
erosion = cv2.erode(original, kernel, iterations=1)
# 进行膨胀操作
dilate = cv2.dilate(original, kernel)
# 开运算
opening = cv2.morphologyEx(original, cv2.MORPH_OPEN, kernel)
# 闭运算
closed = cv2.morphologyEx(original, cv2.MORPH_CLOSE, kernel)
# 梯度运算
gradient = cv2.morphologyEx(original, cv2.MORPH_GRADIENT, kernel)
# 礼帽
tohat = cv2.morphologyEx(original, cv2.MORPH_TOPHAT, kernel)
# 黑帽
blackhat = cv2.morphologyEx(original, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow("Original", original)
cv2.imshow("Erosion", erosion)
cv2.imshow("Dilate", dilate)
cv2.imshow("Opening", opening)
cv2.imshow("Closed", closed)
cv2.imshow("Gradient", gradient)
cv2.imshow("Tohat", tohat)
cv2.imshow("Blackhat", blackhat)
cv2.waitKey(0)
cv2.destroyWindow()

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统·进程管理

一、什么是进程 1.作业和进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务,系统上…

初识Linux -- Linux的背景和发展史介绍

点赞关注不迷路!,本节涉及初识Linux,主要为背景介绍和xshell登录主机。 1.Linux背景 1.1 发展史 Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。 要说Linux,还得从UNIX说起。 1.2 UNIX发…

水下机器人(ROV)中继器(TMS)究竟是个啥?

前段时间公众号后台有人问释放ROV的装置,由于只用过观察级ROV Valor,博主一直以为他说的是绞车,后来才明白他说的是中继器,在水中用来释放、控制和回收ROV的装置。 中继器TMS的全称是缆绳管理系统Tether Management System&#…

Linux基础——Linux开发工具(下)_make/makefile

前言:在经过前面两篇学习,大家对Linux开发工具都有一定的了解,而在此之前最重要的两个工具就是vim,gcc。 如果对这两个工具不太了解,可以先阅读这两篇文章: Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

vue 时间轴页面 自己的写法 欢迎交流指正

<div class"first-box"><!--贯穿线--><div class"vertical-line-wrap"><div class"vertical-line"></div><div class"vertical-line-arrow"></div></div><!--开始--><div c…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

我五一是这样计划的,第一天...

前言 这个时间点&#xff0c;大多数人一定已经“峡谷做好准备全军出击”或者在出行的路上了。这个时间我也在回老家路上聊一聊。 行程 老读者都知道我老家在内蒙的西北的边陲城市&#xff0c;往年票都是随便买、除了春运几乎坐不满&#xff0c;今年五一居然也需要抢票&#…

用Python实现播放gif文件

用Python实现播放gif文件 在Python中&#xff0c;你可以使用第三方库Pillow&#xff08;PIL&#xff09;来加载和展示 GIF 文件。并实现“暂停”和“继续”控制功能。 Pillow是Python社区中最受欢迎的图像处理库之一&#xff0c;可以轻松地完成各种图像处理任务&#xff0c;它…

《21天学通C++》(第十二章)运算符类型与运算符重载

1.为什么要重载运算符&#xff1f; 通过重载运算符&#xff0c;可以将复杂的操作封装成简单的运算符形式&#xff0c;简化代码&#xff0c;提高可读性下面举一个简单的例子 计算两个点的坐标之和。 1.不重载运算符 #include <iostream> using namespace std; class P…

OpenHarmony实战开发-使用SmartPerf-Host分析应用性能

简介 SmartPerf-Host是一款深入挖掘数据、细粒度展示数据的性能功耗调优工具&#xff0c;可采集CPU调度、频点、进程线程时间片、堆内存、帧率等数据&#xff0c;采集的数据通过泳道图清晰地呈现给开发者&#xff0c;同时通过GUI以可视化的方式进行分析。该工具当前为开发者提…

docker在linux上的安装与使用

我的操作系统centos7本地vm docker安装 1、卸载旧版本 如果系统中已经存在旧的Docker&#xff0c;则先卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2、配置一…

Android 音视频基础知识

本系列文章会介绍两个 Android NDK Demo&#xff0c;拉流端会实现一个基于 FFmpeg 的视频播放器 Demo&#xff0c;推流端会实现一个视频直播 Demo&#xff0c;当然在做 Demo 之前会介绍音视频的基础知识。以下是本系列文章的目录&#xff1a; Android 音视频基础知识 Android 音…

【langchain】快速封装替换自定义LLM(基于自定义API或本地模型)

1. 引言 你可能已经注意到&#xff0c;LLM时代下的许多项目&#xff08;特别是Github上的论文项目、工程项目&#xff09;都要求我们设置OpenAI的API Key&#xff0c;就像这样&#xff1a; os.environ["OPENAI_API_KEY"] "sk-"from langchain_openai im…

SDKMAN!

概述 官网&#xff0c;SDKMAN是一款管理多版本SDK的工具&#xff0c;可以实现在多个版本间的快速切换。 其他特性&#xff1a; 易用&#xff1a;安装SDK不再需要去Google想安装的某个软件的官网的下载页&#xff0c;或找其他下载页面&#xff0c;然后下载安装包、解压、设置…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架&#xff0c;由果糖大数据科技团队维护和更新 &#xff0c;开箱即用最易上手的ORM 优点 &#xff1a;【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

Eclipse MAT工具分析内存溢出

1、通过dominator_tree可以查看哪些对象大 可以看到com.codex.terry.entity.User对象有57万个 2、打开thread_overview查看内存溢出的代码

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传&#xff0c;滑动窗口&#xff0c;流量控制&#xff0c;拥塞控制 TCP重传机制&#xff1a; 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传&#xff1a; 超过指定时间没有收到确认应答报文&#xff0c;就会重发该数据 触发超时重传的情况…

(十四)Servlet教程——Servlet中HttpSession的使用

除了使用Cookie&#xff0c;Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制&#xff0c;相应地也增加了服务器的存储压力。 1. 什么是Session Session是另外一种记录客户端状态的机制&#xff0c;不同的是Cookie保存在客户…

2024年618哪些数码家电值得入手?热门家电好物抢先看!

618购物狂欢节即将来临&#xff0c;这是一年一度的大促销活动&#xff0c;家电和数码产品在这个时间段内通常都会有优惠和折扣。但随着产品的多样化&#xff0c;很多时候一款产品就有多款品牌&#xff0c;在这不同品牌又各自擅长不同的东西&#xff0c;看着眼花缭乱。今天我就给…