opencv-python库 cv2开运算闭运算形态学梯度顶部帽底部帽

文章目录

  • 开运算
  • 闭运算
  • 形态学梯度
  • 顶部帽
  • 底部帽
  • cv2.morphologyEx()

开运算

cv2中的开运算是图像依次经过腐蚀、膨胀处理后的过程。

开运算实际是先腐蚀运算,再膨胀运算,可以把细微连在一起的两块目标分开。一般来说,开运算可以使图像的轮廓变得光滑,还能使狭窄的连接断开和消除细毛刺。开运算在过滤噪声的同时并没有对物体的形状、轮廓造成明显的影响,这是一大优势。当只关心物体的位置或者个数时,物体形状的改变不会给任务带来困扰,此时用开运算处理具有处理速度上的优势。

闭运算

闭运算

闭运算是图像形态学操作中的一种,是先膨胀后腐蚀的过程。

闭运算能够填充物体内部细小空洞,连接邻近物体,对物体边缘的微小缺口或细小间断进行弥补,使边缘轮廓线更加光滑,但对物体边缘的突出部分则不作处理。因此,闭运算在消除噪声的同时,很好地保持了物体的轮廓形状。

形态学梯度

cv2形态学梯度是图像经过膨胀操作后的图像与经过腐蚀操作后的图像的差,可以用于抽出物体的边缘1。

形态学梯度运算是用图像的膨胀图像减腐蚀图像的操作,该操作可以获取原始图像中前景图像的边缘。通过将函数cv2.morphologyEx()的操作类型参数op设置为"cv2.MORPH_GRADIENT",可以实现形态学梯度运算

顶部帽

在OpenCV中,顶帽(Top Hat)操作是一种形态学操作,用于突出图像中的亮区域。顶帽操作是通过从原始图像中减去其开运算(先腐蚀后膨胀)的结果来得到的。因此,顶帽操作的结果保留了原始图像中比周围区域更亮的区域,而暗于周围区域的部分则变为黑色1。

顶帽操作在图像处理中常用于增强图像的亮区域,特别是在背景和前景亮度差异较大的情况下。它可以帮助突出图像中的亮色物体,同时抑制比周围区域暗的噪声2

底部帽

在OpenCV中,底部帽(Bottom Hat)运算也称为底帽运算或黑帽运算,是形态学图像处理中的一种操作1。

底帽运算是通过对图像执行闭运算(先膨胀后腐蚀)来平滑图像并移除较大尺度的特征,然后将闭运算结果与原始图像进行差分,以突出图像中的暗区域特征。

底帽运算有助于突出原始图像中的暗区域特征,如阴影、均匀区域中的细微细节等,并可用于增强图像中的暗部细节,使其更加清晰。

cv2.morphologyEx()

cv2.morphologyEx() 是 OpenCV 中用于执行高级形态学变换的函数。与 cv2.erode() 和 cv2.dilate() 相比,cv2.morphologyEx() 提供了更多的形态学操作选项,包括开运算、闭运算、梯度、顶部帽、底部帽等。
函数定义

cv2.morphologyEx(src, op, kernel, anchor=None, iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=None)
  • src: 输入图像。
  • op: 形态学操作的类型,可以是以下值之一:
    • cv2.MORPH_ERODE:腐蚀。
    • cv2.MORPH_DILATE:膨胀。
    • cv2.MORPH_OPEN:开运算(先腐蚀后膨胀)。
    • cv2.MORPH_CLOSE:闭运算(先膨胀后腐蚀)。
    • cv2.MORPH_GRADIENT:形态学梯度(膨胀图像减去腐蚀图像)。
    • cv2.MORPH_TOPHAT:顶部帽(原始图像减去开运算结果)。
    • cv2.MORPH_BLACKHAT:底部帽(闭运算结果减去原始图像)。
  • kernel: 结构元素或核,决定了形态学操作的形状和大小。
  • anchor: 核的锚点位置。默认为 (-1, -1),表示核的中心。
  • iterations: 操作的迭代次数。
  • borderType: 像素外插法,用于处理图像边界。
  • borderValue: 当 borderType 设置为 cv2.BORDER_CONSTANT 时使用的值。

示例

以下是一个使用 cv2.morphologyEx() 执行开运算和闭运算的示例:

import cv2
import numpy as np# 读取图像
image = cv2.imread('input.png', cv2.IMREAD_GRAYSCALE)# 定义一个 5x5 的矩形核
kernel = np.ones((5, 5), np.uint8)# 执行开运算
open_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, iterations=1)# 执行闭运算
close_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=1)# 显示原始图像、开运算结果和闭运算结果
cv2.imshow('Original Image', image)
cv2.imshow('Open Operation', open_image)
cv2.imshow('Close Operation', close_image)# 等待用户按键,然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们首先读取一个灰度图像,然后定义一个 5x5 的矩形核。接着,我们使用 cv2.morphologyEx() 函数分别执行开运算和闭运算,并将结果显示出来。
注意事项

  • 开运算通常用于消除小的对象,而闭运算用于填补对象内部的小孔或裂缝。
  • 形态学操作对于二值图像特别有效,但也可以应用于灰度图像。
  • 核的大小和形状对形态学操作的结果有重要影响。较大的核会导致更显著的变化,而不同的核形状(如矩形、椭圆形等)会产生不同的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

【深入解析算法】内存使用,应用 上

8.3.6 内存使用 符号表的内存使用 方法N个元素所需的内存(引用类型)基于拉链法的散列表48N32M基于线性探测的散列表在32N和128N之间各种二叉查找树56N 自计算机发展的伊始&#xff0c;研究人员就研究了(并且现在仍在继续研究)散列表并找到了很多方法来改进我们所讨论过的几种…

知识融合与消歧:完善知识图谱的关键步骤

知识融合与消歧&#xff1a;完善知识图谱的关键步骤 一、引言&#xff1a;知识融合与消歧的重要性 在今天的数据驱动时代&#xff0c;知识图谱已成为组织和理解海量信息的关键技术。它们使得复杂的数据关系可视化&#xff0c;为人工智能提供了丰富的知识基础。然而&#xff0c…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(九)- 向量定点算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

打造你的专属云开发环境:支持任意 IDE,任意云服务 | 开源日报 No.215

loft-sh/devpod Stars: 6.9k License: MPL-2.0 devpod 是一个开源的、仅限客户端的、不受限制的工具&#xff0c;可以与任何集成开发环境&#xff08;IDE&#xff09;一起使用&#xff0c;并允许您在任何云端、Kubernetes 或本地 Docker 上进行开发。 使用 devcontainer.json…

python文件打包找不到文件路径

引用&#xff1a;【将Python代码打包成exe可执行文件】 https://www.bilibili.com/video/BV1P24y1o7FY/?p4&share_sourcecopy_web&vd_sourced5811f31a0635dfc69a182c7bf1adb8b 在代码中&#xff0c;我们想读取文件a&#xff0c;一般使用如下方法。 import osdir os…

【Ubuntu20.04.6】VMWare Station 17安装Ubuntu20.04.6虚拟机系统

步骤1&#xff1a;下载Ubuntu20.04.6镜像ISO文件 Ubuntu20.04.6镜像ISO文件下载&#xff1a; https://mirrors.ustc.edu.cn/ubuntu-releases/20.04/ 步骤2&#xff1a;下载安装VMWare Station 17 下载和安装教程&#xff1a; https://blog.csdn.net/u012621175/article/deta…

【Docker】搭建开源免费的书签管理系统 - OneNav

【Docker】搭建开源免费的书签管理系统 - OneNav 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。 简介 OneNav是一个基于PHP的轻量级网址导航系统&#xff0c;旨在帮助用户整理和访问他们的常用网站。 OneNav的主要特点如下&#xff1a; 美观易用&#x…

分享一个基于Multi-SLAM+3DGS的新一代三维内容生产技术

基于智能空间计算&#xff0c;新一代超逼真三维内容生成技术。 可自动化生成超逼真的大场景三维模型&#xff0c;并在各类终端和空间计算设备中&#xff0c;实现前所未有的沉浸式体验。 更可接入专业三维软件和应用平台&#xff0c;进行深度的模型开发与场景落地。 支持超大复杂…

“进击的巨人”:服务器硬件基础知识解析

引言&#xff1a; 服务器是网络环境中负责处理数据、运行应用程序和服务多用户的高性能计算机系统。了解服务器的硬件构成有助于更好地管理和优化IT资源。 服务器和普通PC的差异&#xff1a; 服务器具有比个人电脑更高的处理能力、稳定性和可靠性&#xff0c;它们通常运行在没…

ElasticSearch 中分词与倒排索引的原理

首先是给检索用的。 英文&#xff1a;一个单词一个词&#xff0c;很简单。I am a student&#xff0c;词与词之间空格分隔。中文&#xff1a;我是学生&#xff0c;就不能一个字一个字地分&#xff0c;我-是-学生。这是好分的。还有歧义的&#xff0c;使用户放心&#xff0c;使…

【算法】有序数组的两数之和

题目 在一个有序数组中找到两个数&#xff0c;两个数之和为给定的一个数&#xff0c;返回两个数在数组中的下标。 原理 二分法 以第一个数为基准数&#xff0c;采用二分法寻找数组中与之相加等于给定数的数字&#xff0c;找到则返回下标&#xff0c;否则以第二个数为基准数…

SystemC入门之测试平台编写完整示例:带同步输出的多路选择器

内容&#xff1a;SystemC入门书中的简单测试平台编写示例。 模块文件编写 带锁存输出的4选1多路器模型。输出在信号clock的正跳变沿时刻被锁存。 sync_mux41.h文件 #include <systemc.h>SC_MODULE(sync_mux41) {sc_in<bool> clock, reset;sc_in<sc_uint<…

opencv+python(通道的分离与合并)笔记

分割图像通道&#xff1a; 通过函数mvsplit(img)&#xff1b;mv返回的通道&#xff1b; RGB有3个通道&#xff1b;灰度图只有一个通道&#xff1b; b,g,r cv2.split(img)cv2.imshow("b",b)#通道bcv2.imshow("g",g)#通道gcv2.imshow("r",r)#通道…

c++:局部变量位置和全局变量位置的vector区别

区别&#xff1a;局部变量位置每次都会重置为空&#xff0c;全局不会。但int a[]不管在什么位置都不会重置&#xff08;不进行memset时&#xff09; 代码&#xff1a; 1.局部&#xff1a; #include<bits/stdc.h> using namespace std;int main() {for(int i 0; i <…

React原理

本文主要讲手写React中重要的几个部分&#xff0c;有助于建立对React源码的认知。 1. CreateElement 相信大家一定对jsx不陌生 <div title"box"><p>jsx</p><span>hhh</span> </div>React中的jsx其实就是一个语法糖&#xff0…

微信小程序的页面交互2

一、自定义属性 &#xff08;1&#xff09;定义&#xff1a; 微信小程序中的自定义属性实际上是由data-前缀加上一个自定义属性名组成。 &#xff08;2&#xff09;如何获取自定义属性的值&#xff1f; 用到target或currentTarget对象的dataset属性可以获取数据 &#xff…

基于双向长短期神经网络的碳排放量预测,基于bilstm的碳排放量预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络的碳排放量预测,基于bilstm的碳排放量预测 完整代码: Bilstm双向神经网络碳排放量预测.zip资源-CSDN文库 https://download.csdn.net/download/abc991835105/89087117 效果图 结果分析 展…

c# wpf LiveCharts 简单试验2

1.概要 1.1 说明 1.2 要点 1.2.1 添加命名控件 xmlns:lvc"clr-namespace:LiveCharts.Wpf;assemblyLiveCharts.Wpf" 1.2.2 图片控件 <lvc:CartesianChart Name"chart" LegendLocation"Right"/> 1.3 代码文件引用 using LiveCharts…