OpenCV:开运算
目录
1. 简述
2. 用腐蚀和膨胀实现开运算
2.1 代码示例
2.2 运行结果
3. 开运算接口
3.1 参数详解
3.2 代码示例
3.3 运行结果
4. 开运算应用场景
5. 注意事项
6. 总结
相关阅读
OpenCV:图像的腐蚀与膨胀-CSDN博客
OpenCV:闭运算-CSDN博客
1. 简述
简而言之:开运算 = 腐蚀 + 膨胀
开运算 是一种形态学操作,通常用于去除图像中的小噪点,同时保留较大的前景物体。
它的操作顺序是:
- 先对图像进行 腐蚀,去除细小的噪点和瑕疵。
- 再进行 膨胀,恢复被腐蚀的前景物体形状。
开运算的主要作用是:
- 去除噪声(尤其是白色背景下的黑色小物体)。
- 平滑前景物体的边缘。
开运算的数学表达式为:
其中:
- A 是输入图像。
- B 是卷积核。
- ⊖ 表示腐蚀操作。
- ⊕ 表示膨胀操作。
2. 用腐蚀和膨胀实现开运算
2.1 代码示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蚀操作
result1 = cv2.erode(image, kernel, iterations=1)# 膨胀操作
result2 = cv2.dilate(result1, kernel, iterations=1)# 显示原始图像、开运算(腐蚀 + 膨胀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
2.2 运行结果

从左到右:
- 原始黑底白字图像,带一些白色的噪点。
- 图像腐蚀和膨胀之后的结果,白色噪点消失。
3. 开运算接口
在 OpenCV 中,开运算由函数 cv2.morphologyEx() 实现,其关键参数如下:
cv2.morphologyEx(src, op, kernel, dst=None, anchor=(-1, -1), iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=0)
3.1 参数详解
- src:输入图像。通常是二值化图像或灰度图像。
- op:操作类型,开运算的标识符为 cv2.MORPH_OPEN。
- kernel:结构元素(卷积核)。决定形态学操作的邻域范围和形状。可以使用 cv2.getStructuringElement() 创建。
- dst:输出图像。默认为 None。
- anchor:结构元素的锚点,默认为 (-1, -1),即以核的中心为锚点。
- iterations:操作的迭代次数,默认为 1。
- borderType:边界模式,定义图像边界的填充方式,常用 cv2.BORDER_CONSTANT。
- borderValue:边界值,仅在 borderType 为 cv2.BORDER_CONSTANT 时使用。
常用的参数为前3个:
cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
3.2 代码示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q3.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 腐蚀操作
#result1 = cv2.erode(image, kernel, iterations=1)# 膨胀操作
#result2 = cv2.dilate(result1, kernel, iterations=1)# 开运算
result2 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)# 显示原始图像、开运算(腐蚀 + 膨胀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 运行结果

结果与2.2一致。
4. 开运算应用场景
- 去除小噪点:在二值化图像中,小的孤立噪声点可以通过开运算清除。
- 提取连通区域:对于连通区域的检测,开运算可以去掉孤立的小物体,仅保留目标区域。
- 平滑边缘:通过开运算,前景物体的边缘可以更加平滑。
5. 注意事项
- 核的大小与形状:卷积核的大小直接影响结果。核过大会过度去除图像细节,核过小则可能无法有效去除噪声。
- 输入图像类型:开运算适用于二值化或灰度图像,对于彩色图像需先转换。
- 多次操作:对于复杂噪声,可能需要多次开运算,或调整核的大小与形状。
6. 总结
开运算是图像形态学中的基本操作,用于去除小噪点、平滑边缘等。OpenCV 提供了功能强大的接口 cv2.morphologyEx(),可以灵活实现开运算及其他形态学操作。通过选择合适的卷积核,可以在实际项目中轻松应对各种图像处理问题。
相关文章:
OpenCV:开运算
目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:闭运算-CSDN博客 …...
38. RTC实验
一、RTC原理详解 1、6U内部自带到了一个RTC外设,确切的说是SRTC。6U和6ULL的RTC内容在SNVS章节。6U的RTC分为LP和HP。LP叫做SRTC,HP是RTC,但是HP的RTC掉电以后数据就丢失了,即使用了纽扣电池也没用。所以必须要使用LP,…...
Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持
在去年春节,Flutter 官方发布了宏(Macros)编程的原型支持, 同年的 5 月份在 Google I/O 发布的 Dart 3.4 宣布了宏的实验性支持,但是对于 Dart 内部来说,从启动宏编程实验开始已经过去了几年,但…...
巴菲特价值投资思想的核心原则
巴菲特价值投资思想的核心原则 关键词:安全边际、长期投资、内在价值、管理团队、经济护城河、简单透明 摘要:本文深入探讨了巴菲特价值投资思想的核心原则,包括安全边际、长期投资、企业内在价值、优秀管理团队、经济护城河和简单透明的业务…...
C 或 C++ 中用于表示常量的后缀:1ULL
1ULL 是一个在 C 或 C 中用于表示常量的后缀,它具体指示编译器将这个数值视为特定类型的整数。让我们详细解释一下: 1ULL 的含义 1: 这是最基本的部分,表示数值 1。U: 表示该数值是无符号(Unsigned)的。这意味着它只…...
vue3中el-input无法获得焦点的问题
文章目录 现象两次nextTick()加setTimeout()解决结论 现象 el-input被外层div包裹了,设置autofocus不起作用: <el-dialog v-model"visible" :title"title" :append-to-bodytrue width"50%"><el-form v-model&q…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<3>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们来对上一节做一些小补充,了解学习一下assert断言,指针的使用和传址调用…...
(三)QT——信号与槽机制——计数器程序
目录 前言 信号(Signal)与槽(Slot)的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制,用于不同对象之间的事件响…...
Qt 5.14.2 学习记录 —— 이십이 QSS
文章目录 1、概念2、基本语法3、给控件应用QSS设置4、选择器1、子控件选择器2、伪类选择器 5、样式属性box model 6、实例7、登录界面 1、概念 参考了CSS,都是对界面的样式进行设置,不过功能不如CSS强大。 可通过QSS设置样式,也可通过C代码…...
Hot100之哈希
1两数之和 题目 思路解析 解法1--两次循环 解法2--哈希表一次循环 代码 解法1--两次循环 class Solution {public int[] twoSum(int[] nums, int target) {int nums1[] new int[2];int length nums.length;for (int i 0; i < length; i) {for (int j i 1; j < …...
油漆面积——蓝桥杯
1.题目描述 X 星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便,建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量,每个机器人都会报告一个或多个矩…...
深度解析:网站快速收录与服务器性能的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施,其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...
925.长按键入
目录 一、题目二、思路三、解法四、收获 一、题目 你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字&am…...
JavaScript 中的 var 和 let :关键区别与使用建议
在 JavaScript 开发中,变量声明是基础且重要的部分。 var 和 let 都是用于声明变量的关键字,但它们在作用域、变量提升、重复声明等方面存在显著差异。本文将详细探讨它们的区别,并给出使用建议。 1. 作用域 1.1 var 的作用域 …...
寒假刷题Day19
一、923. 三数之和的多种可能 class Solution { public:int threeSumMulti(vector<int>& arr, int target) {const int MOD 1000000007; // 正确的模数long long ans 0; // 使用 long long 防止溢出std::sort(arr.begin(), arr.end());for (size_t i 0; i < a…...
写好简历的三个关键认知
在当今竞争激烈的就业市场中,一份优秀的简历往往是敲开理想企业大门的第一把钥匙。然而,很多求职者在写简历时往往不得要领,让宝贵的机会从指间溜走。今天,让我们一起探讨如何提升简历写作水平,让你的职业之路走得更顺…...
工具的应用——安装copilot
一、介绍Copilot copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下&…...
Koa 基础篇(二)—— 路由与中间件
let app new Koa() router.get(“/”,async ctx > { ctx.body “hello koa router” }) app.use(router.routes()) app.use(router.allowedMethods()) app.listen(3000) 运行项目,在浏览器访问本地3000端口,在页面上就会看到输出的语句。这就…...
帆软 FCA -业务分析师认证学习
帆软 FCA -业务分析师认证学习 认证概述 适合人群 企业中有需求管理、指标梳理、业务逻辑梳理、项目规划等需求的人员,想提升综合数据能力、推进数据应用落地的业务/IT骨干。 具体-FCA-业务分析理论 考试要求: FCA-业务分析理论考试- 费用:…...
Miniconda 安装及使用
文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中,“环境管理”是一个非常重要的概念,它主要是指对 Python 解释器及其相关依赖库进行管理和隔离,以确保开发环境…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
