【C++的OpenCV】第六课-OpenCV图像常用操作(三):OpenCV的图像的侵蚀和扩张

news2025/7/24 10:14:08


让我们继续

  • 一、图像的侵蚀和扩张
    • 1.1 侵蚀
      • 1.1.1 函数原型
      • 1.1.2 侵蚀的效果
      • 1.1.3 关于侵蚀的解释
    • 1.2 扩张
      • 1.2.1 函数原型
      • 1.2.2 扩张的效果
  • 二、实例

一、图像的侵蚀和扩张

本章节中我们将会学习到:

  • cv::erode() 函数详情
  • cv::dilate() 函数详情

两个函数的基本使用方法和实例。

关于二者的用途:
1. 消除噪音,这里大家应该记得还有一个东西也是常用于降噪的(图像的模糊滤波处理)
2. 隔离单个元素且链接图像中的不同元素
3. 查找图像中的强度凸点或者孔

1.1 侵蚀

1.1.1 函数原型


void cv::erode	(	
					InputArray 	src,
					OutputArray 	dst,
					InputArray 	kernel,
					Point 	anchor = Point(-1,-1),
					int 	iterations = 1,
					int 	borderType = BORDER_CONSTANT,
					const Scalar & 	borderValue = morphologyDefaultBorderValue() 
				)	
  • 参数解释
1、src:输入的图像;通道的数量可以是任意的,
	   		但是深度应该是CV_8U、CV_16U、CV_36S、CV_32F或CV_64F之一。
2、dst:依照输入图像经过处理后输出的图像(这里指侵蚀后)
3、kernel:用于侵蚀的结构原件;如果原件是Mat的对象(element=Mat(),
			则将会创建一个3x3大小的矩形结构原件。
			内核也可以通过getStructuringElement()去创建。
4、anchor:侵蚀内核元件的锚点,默认值是(-1,-1)即视为锚点在该内核的中心。
5、iterations:侵蚀被应用的次数
6、borderType:像素外延的方法,请参见BorderTypes。不支持BORDER_WRAP。
7、borderValue:边界的值(如果边界为等宽,即常量边界)

1.1.2 侵蚀的效果

在这里插入图片描述

1.1.3 关于侵蚀的解释

        通过一个特定的结构元素腐蚀一个图像。图像腐蚀的过程类似于一个卷积的过程,源图像矩阵A以及结构元素B,B在A矩阵上依次移动,每个位置上B所覆盖元素的最小值替换B的中心位置值(即锚点处),完成整个侵蚀的过程。
        扩张是一个道理。

1.2 扩张

1.2.1 函数原型


void cv::dilate	(	
					InputArray 	src,
					OutputArray 	dst,
					InputArray 	kernel,
					Point 	anchor = Point(-1,-1),
					int 	iterations = 1,
					int 	borderType = BORDER_CONSTANT,
					const Scalar & 	borderValue = morphologyDefaultBorderValue() 
				)	
  • 参数解释:
    完全同侵蚀(将“侵蚀”二字换成“扩展”即可)的函数参数解释!!参数说明

1.2.2 扩张的效果

在这里插入图片描述

二、实例

  • 以侵蚀为例:(扩展的代码类似)
#include <iostream>
#include <opencv2/opencv.hpp>

#define PATH_IMG  "D:\\opencvDemo\\imgs\\demo.png"

using namespace cv;
using namespace std;

int main()
{
	Mat img = imread(PATH_IMG);
	if (img.empty())
	{
		cout << "图像打开失败!" << endl;
		return 0;
	}
	Mat imgDst;
	//自定义核
	Mat element = getStructuringElement(cv::MORPH_RECT, Size(20, 20));
	imshow("原图", img);
	dilate(img, imgDst, element);
	imshow("扩张", imgDst);
	waitKey(0);
	return 0;
}
  • 效果
    原图:
    在这里插入图片描述

处理后的图片:
在这里插入图片描述

回到顶部

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

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

相关文章

java 接口 详解

目录 一、概述 1.介绍 : 2.定义 : 二、特点 1.接口成员变量的特点 : 2.接口成员方法的特点 : 3.接口构造方法的特点 : 4.接口创建对象的特点 : 5.接口继承关系的特点 : 三、应用 : 1.情景 : 2.多态 : ①多态的传递性 : ②关于接口的多态参数和多态…

Android ION 相关信息查看方法

目录 查看DMA buffer 信息 查看ion buffer 的总体分配情况 分配的ION buffer 都会设置为DMA buffer&#xff0c;以fd的形式交给使用方&#xff0c; 如app, camera等。 查看ion 的使用情况&#xff0c;可以查看ion 的各个heap分配情况&#xff0c; 也可以从DMA buffer 入手查…

勒索软件BlackByte出现新变种,系Go语言编写

BlackByte 是一个提供勒索软件即服务&#xff08;RaaS&#xff09;的攻击组织&#xff0c;自从 2021 年 7 月以来一直保持活跃。最初&#xff0c;BlackByte 使用 C# 开发&#xff0c;最近攻击者使用 Go 重写了恶意软件。FBI 也已经发布公告披露 BlackByte 已经攻击了许多公司&a…

文献阅读 An implementation of the seismic resolution enhancing network based on GAN

题目 An implementation of the seismic resolution enhancing network based on GAN 基于GAN的地震分辨率增强网络的实现 摘要 对于地震数据&#xff0c;本文利用深度学习来学习不同层次的特征并将它们合并以恢复缺失的分辨率。 将GAN网络引入到地震数据处理&#xff1b;对…

劳保防护用品穿戴检测 python

劳保防护用品穿戴检测算法通过pythonOpencv深度学习技术&#xff0c;劳保防护用品穿戴检测算法对现场人员防护穿戴用品进行全天候检测&#xff0c;当检测到未按照要求进行穿戴&#xff0c;立即对现场违规人员进行抓拍。Python是一种由Guido van Rossum开发的通用编程语言&#…

在做自动化测试前需要知道的

什么是自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…

2023年DAMA-CDGA/CDGP数据治理工程师认证报名时间

2023年DAMA-CDGA/CDGP数据治理工程师认证报名时间 DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决…

企业急需:拥有一个属于自身的知识库!

如今&#xff0c;拥有知识库对任何企业来说都是绝对必要的。特别是在软件即服务方面。如果您真的希望您的 SaaS 业务取得成功&#xff0c;您需要从第一天开始构建知识库。为什么&#xff1f;首先&#xff0c;SaaS 公司有一个货币化模型&#xff0c;专注于他们的每月经常性收入 …

plsql过程语言之uxdb与oracle语法差异

序号场景uxdboracle1在存储过程中使用goto子句create or replace procedure uxdbc_oracle_extension_plsql_goto_0001_procedure01(t1 int) language plsql as $$ begin if t1%20 then goto even_number; else goto odd_number; end if; <<even_number>> raise…

LAMP平台部署及应用

LAMP平台部署及应用 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c…

117.Android 简单的拖拽列表+防止越界拖动(BaseRecyclerViewAdapterHelper) 两种方式实现

//一.第一种方式 通过BaseItemDraggableAdapter类和其提供的的拖拽监听实现&#xff1a; //1.第一步 导入依赖库和权限&#xff1a; //依赖库&#xff1a; //RecyclerView implementation com.android.support:recyclerview-v7:28.0.0//RecyclerAdapter implementation com.…

WAF:ModSecurity on Nginx(15)

预备知识 Nginx概述 Nginx ("engine x") 是一个高性能的HTTP和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日。其将源代…

Mysql的函数GROUP_CONCAT和FIND_IN_SET

业务场景&#xff1a; 表A&#xff1a;存在 customer_phone&#xff1b;bac_id主键 表B&#xff1a;存在 主键id&#xff1b;bac_id字段 customer_phone:用户手机号&#xff1b; bac_id:主键 表A &#xff1a;每个手机号可能会对应多个主键&#xff1b;要查询每个客户手机号包…

我该怎么选择IB课程?

IB用6大学科组及3大课程核心构建知识体系&#xff0c;涵盖广博、注重知行合一&#xff0c;对学生的综合素质的提升以及综合竞争力的打造都十分有益。IB选课建议 六大学科组中的每个课程分为HL&#xff08;高难度&#xff09;和SL&#xff08;标准水平&#xff09; HLIB课程&…

「RISC-V Arch」SBI 规范解读(上)

术语 SBI&#xff0c;Supervisor Binary Interface&#xff0c;管理二进制接口 U-Mode&#xff0c;User mode&#xff0c;用户模式 S-Mode&#xff0c;Supervisor mode&#xff0c;监督模式 VS-Mode&#xff0c;Virtualization Supervisor mode&#xff0c;虚拟机监督模式 …

三菱FX3U与威纶MT8071IP走RS422通讯

一、准备工作 1.需要工具&#xff1a; 电脑一台、PLC&#xff1a;三菱FX3U一个、触摸屏&#xff1a;威纶MT8071一个、 &#xff08;三菱圆形编程口转USB&#xff09;一根、触摸屏与电脑通讯线一根&#xff08;T型口数据线&#xff09;、PLC与触摸屏通讯线&#xff1a;电烙…

谷歌搜索留痕的技术公式【2023年新版】

本文主要分享谷歌搜索留痕的技术公式&#xff0c;让你更简单的去学习谷歌留痕的技术原理 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这样的行为吧。 谷歌搜索留痕的技术公式是什么&#xff1f; 答案是&#xff1a;需要做排名的关键词海量能搜…

Apache Hadoop生态部署-hadoop单机安装

目录 查看服务架构图-服务分布、版本信息 1&#xff1a;安装包下载 2&#xff1a;配置环境变量 3&#xff1a;服务配置 &#xff08;1&#xff09;core-site.xml &#xff08;2&#xff09;配置 hadoop-env.sh &#xff08;3&#xff09;HDFS 配置文件hdfs-site.xml &a…

【Redis】数据库和缓存如何保证一致性?

【Redis】数据库和缓存如何保证一致性&#xff1f; 文章目录【Redis】数据库和缓存如何保证一致性&#xff1f;常见方案先更新缓存&#xff0c;再更新数据库先更新数据库&#xff0c;再更新缓存并发情况下的思考先删除缓存&#xff0c;再更新数据库先更新数据库&#xff0c;再删…

StopWatch计时器

前言 开发中&#xff0c;为了评估性能&#xff0c;我们通常会使用System.currentTimeMillis() 去计算程序运行耗时 long startTimeSystem.currentTimeMillis();//业务代码... long endTimeSystem.currentTimeMillis(); System.out.println("耗时:" (endTime-startT…