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

OpenCV:开运算

目录

1. 简述

2. 用腐蚀和膨胀实现开运算

2.1 代码示例

2.2 运行结果

3. 开运算接口

3.1 参数详解

3.2 代码示例

3.3 运行结果

4. 开运算应用场景

5. 注意事项

6. 总结


相关阅读

OpenCV:图像的腐蚀与膨胀-CSDN博客

OpenCV:闭运算-CSDN博客


1. 简述

简而言之:开运算 = 腐蚀 + 膨胀

开运算 是一种形态学操作,通常用于去除图像中的小噪点,同时保留较大的前景物体。
它的操作顺序是:

  1. 先对图像进行 腐蚀,去除细小的噪点和瑕疵。
  2. 再进行 膨胀,恢复被腐蚀的前景物体形状。

开运算的主要作用是:

  • 去除噪声(尤其是白色背景下的黑色小物体)。
  • 平滑前景物体的边缘。

开运算的数学表达式为:

A\bigcirc B = \left ( A \ominus B \right ) \oplus B

其中:

  • 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&#xff0c…...

    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包裹了&#xff0c;设置autofocus不起作用&#xff1a; <el-dialog v-model"visible" :title"title" :append-to-bodytrue width"50%"><el-form v-model&q…...

    程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<3>

    大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们来对上一节做一些小补充&#xff0c;了解学习一下assert断言&#xff0c;指针的使用和传址调用…...

    (三)QT——信号与槽机制——计数器程序

    目录 前言 信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制&#xff0c;用于不同对象之间的事件响…...

    Qt 5.14.2 学习记录 —— 이십이 QSS

    文章目录 1、概念2、基本语法3、给控件应用QSS设置4、选择器1、子控件选择器2、伪类选择器 5、样式属性box model 6、实例7、登录界面 1、概念 参考了CSS&#xff0c;都是对界面的样式进行设置&#xff0c;不过功能不如CSS强大。 可通过QSS设置样式&#xff0c;也可通过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 星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便&#xff0c;建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量&#xff0c;每个机器人都会报告一个或多个矩…...

    深度解析:网站快速收录与服务器性能的关系

    本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施&#xff0c;其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...

    925.长按键入

    目录 一、题目二、思路三、解法四、收获 一、题目 你的朋友正在使用键盘输入他的名字 name。偶尔&#xff0c;在键入字符 c 时&#xff0c;按键可能会被长按&#xff0c;而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字&am…...

    JavaScript 中的 var 和 let :关键区别与使用建议

    在 JavaScript 开发中&#xff0c;变量声明是基础且重要的部分。 var 和 let 都是用于声明变量的关键字&#xff0c;但它们在作用域、变量提升、重复声明等方面存在显著差异。本文将详细探讨它们的区别&#xff0c;并给出使用建议。 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…...

    写好简历的三个关键认知

    在当今竞争激烈的就业市场中&#xff0c;一份优秀的简历往往是敲开理想企业大门的第一把钥匙。然而&#xff0c;很多求职者在写简历时往往不得要领&#xff0c;让宝贵的机会从指间溜走。今天&#xff0c;让我们一起探讨如何提升简历写作水平&#xff0c;让你的职业之路走得更顺…...

    工具的应用——安装copilot

    一、介绍Copilot copilot是一个AI辅助编程的助手&#xff0c;作为需要拥抱AI的程序员可以从此尝试进入&#xff0c;至于好与不好&#xff0c;应当是小马过河&#xff0c;各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题&#xff0c;然后把它总结下&…...

    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) 运行项目&#xff0c;在浏览器访问本地3000端口&#xff0c;在页面上就会看到输出的语句。这就…...

    帆软 FCA -业务分析师认证学习

    帆软 FCA -业务分析师认证学习 认证概述 适合人群 企业中有需求管理、指标梳理、业务逻辑梳理、项目规划等需求的人员&#xff0c;想提升综合数据能力、推进数据应用落地的业务/IT骨干。 具体-FCA-业务分析理论 考试要求&#xff1a; FCA-业务分析理论考试- 费用&#xff1a…...

    Miniconda 安装及使用

    文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中&#xff0c;“环境管理”是一个非常重要的概念&#xff0c;它主要是指对 Python 解释器及其相关依赖库进行管理和隔离&#xff0c;以确保开发环境…...

    SkyWalking 10.2.0 SWCK 配置过程

    SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

    stm32G473的flash模式是单bank还是双bank?

    今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

    springboot 百货中心供应链管理系统小程序

    一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

    uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

    在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

    Python如何给视频添加音频和字幕

    在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

    #Uniapp篇:chrome调试unapp适配

    chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

    CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

    目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

    Git常用命令完全指南:从入门到精通

    Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

    HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

    上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

    从面试角度回答Android中ContentProvider启动原理

    Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...