《opencv实用探索·五》opencv小白也能看懂的图像腐蚀

1、图像腐蚀原理简单理解:
腐蚀是形态学最基本的操作,都是针对白色部分(高亮部分)而言的。即原图像中高亮部分被蚕食,得到比原图更小的区域。

2、图像腐蚀的作用:
(1)去掉毛刺,去掉孤立的像素,提取骨干信息。
(2)边缘检测,膨胀和腐蚀可以提取二值图像中的边缘信息,通过先膨胀在腐蚀可以是边缘更加明显;
(3)去除噪声,二值图像中可能存在一些噪声点,或者孤立的像素点,通过一定次数的腐蚀操作可以消除孤立的像素点,通过一定次数的膨胀操作可以填充小的噪声点;
(4)提取信息,通过膨胀和腐蚀操作可以提取文本区域;

3、腐蚀的过程
用一个结构元素的中心覆盖原图像(二值图像只有0和1)的每个像素,看结构元素覆盖的原图像部分,取原图像中被覆盖部分像素的最小值替换被结构元素中心覆盖的原图像像素值。下面演示腐蚀过程:

(1)先定义一个结构元素(核元素),通常是正方形或圆。以正方形为例,如下图。
在这里插入图片描述
定义一个原图像如下图(灰色区域像素值都为1,白色区域像素值都为0):
在这里插入图片描述
现在把核中心放在第一个像素,如下图:
由于第一行第二列和第二行第一列都被核元素覆盖,并且这两个位置原图像像素值都为0,那么把0替换核中心覆盖的位置,即把原图像第一行第一列像素值置为0。
在这里插入图片描述
继续把核中心放在第二个像素,如下图:
原图像第一行第一列和第一行第二列都被核元素覆盖,且像素值都是0,核中心在第一行第二列,那么把原图像该位置置为0
在这里插入图片描述
用上面方法在原图像第一行被腐蚀后变为如下图样:
在这里插入图片描述
第二行就以第二行第三列位置的像素为例,把核元素覆盖上去,如下图:
这时候可以看到原图像被核元素覆盖的部分,每个元素最小值都是1,核元素中心位置即第二行第三列像素值置为1
在这里插入图片描述
最后通过上面的方法腐蚀原图像最终的效果如下:
在这里插入图片描述

4、opencv接口使用

该函数用于生成常用的结构元素图像。

Mat cv::getStructuringElement(int  shape,
                              Size  ksize,
                              Point  anchor = Point(-1,-1) 
                              )

shape:结构元素的种类,如下图
在这里插入图片描述
ksize:结构元素的尺寸大小,一般情况下,结构元素的种类相同时,结构元素的尺寸越大腐蚀效果越明显。
anchor:中心点的位置,默认参数为结构元素的几何中心点。

该函数用于生成腐蚀后的图像。

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() 
               )

src:输入的待腐蚀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
dst:腐蚀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
kernel:用于腐蚀操作的结构元素,可以自己定义,也可以用getStructuringElement()函数生成。
anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点
iterations:腐蚀的次数,默认值为1。腐蚀次数越多效果越明显。
borderType:像素外推法选择标志,取值范围在表3-5中给出。默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。
borderValue:使用边界不变外推法时的边界值。

最后两个参数对图像中主要部分的腐蚀操作没有影响,因此在多数情况下使用默认值即可。
需要注意的是该函数的腐蚀过程只针对图像中的非0像素,如果图像注意以0像素为背景(背景基本黑色),那么腐蚀操作后会看到图像中的内容变得更瘦更小;如果图像是以255像素为背景(背景基本白色),那么腐蚀操作后会看到图像中的内容变得更粗更大。

案例使用:

int main(   )
{
	//载入原图  
	Mat srcImage = imread("1.jpg");
	//显示原图
	imshow("【原图】腐蚀操作", srcImage);
	//进行腐蚀操作 
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage;
	erode(srcImage, dstImage, element);
	//显示效果图 
	imshow("【效果图】腐蚀操作", dstImage);
	waitKey(0); 

	return 0;
}

效果如下:
原图像:
在这里插入图片描述

腐蚀后的图像:
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【软件测试】白盒测试和黑盒测试

一、软件测试基本分类 一般地,我们将软件测试活动分为以下几类:黑盒测试、白盒测试、静态测试、动态测试、手动测试、自动测试等等。 黑盒测试 黑盒测试又叫功能测试、数据驱动测试或给予需求规格说明书的功能测试。这种测试注重于测试软件的功能性需…

基数排序及利用数组简化解题

红豆不堪看,满眼相思泪 本文主要是帮助大家熟练掌握利用数组进行有关判断的题目,看完本文后在之后的刷题中都可以利用这种思想,当然举例中的题目利用该种方法可能不是最优解,但绝对是你看到题目不用思考太多就可以做出来的方法&am…

Python入门06布尔值

目录 1 什么是布尔值2 怎么生成布尔值3 在控制程序中使用布尔值4 数据过滤、排序和其他高级操作总结 1 什么是布尔值 首先我们要学习一下布尔值的定义,布尔值是一种数据类型,它只有两个可能的值:True(真)或 False&…

悠络客受邀出席2023上海区域零售(餐饮)数字化运营实战沙龙研讨会

11月23日,由中国零售(餐饮)CIO俱乐部、《智慧零售与餐饮》主办的2023上海区域零售(餐饮)数字化运营实战沙龙研讨会在上海召开,悠络客合伙人兼销售副总裁张勇作为演讲嘉宾受邀出席了本次大会。 本次研讨会汇…

【紫光同创PCIE教程】——使用官方驱动在Windows下进行DMA读写操作/PIO读写操作

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 紫光同创官方主推的是在linux系统下开发驱动和上层软件,相应地,官方提供了在linux一个基于GTK2…

Python链式调用技巧:代码流畅无缝连接

更多资料获取 📚 个人网站:ipengtao.com 链式调用是一种编程风格,它允许将多个方法调用连接在一起,形成一个连贯的操作链。在Python中,链式调用常常用于使代码更简洁、易读,尤其在处理数据处理和函数式编程…

AntDB“超融合+流式实时数仓”——打造分布式数据库新纪元

(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&a…

二叉树题目:祖父结点值为偶数的结点和

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:祖父结点值为偶数的结点和 出处:1315. 祖父结点值为偶数的结点和 难度 5 级 题目描述 要求 给定二…

笔记二十六、React中路由懒加载的扩展使用

26.1 在路由中配置懒加载 lazy routes/index.jsx 代码 import {Navigate} from "react-router-dom"; import Home from "../components/Home"; import About from "../components/About"; // import Classify from "../components/Home/c…

VirtualBox 7.0.8(虚拟机软件)

VirtualBox是一款开源的虚拟机软件,它是使用Qt编写,在Sun被Oracle收购后正式更名成Oracle VM VirtualBox。它可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系统作为客户端操作系统。使用者可以在VirtualBox上安装并且运…

对话汪源:数智时代为企业构建新的竞争力,和网易数帆的“为与不为”

CodeWave在内的诸多“主演”正在重新演绎网易数帆,在网易数帆的新故事里,做专业、底层、核心的工具,是其成长至今最核心的底色。 作者|斗斗 编辑|皮爷 出品|产业家 “我希望在中间层能构建一个好的生态。”网易汪源的这句话,让…

【Openstack Train安装】六、Keystone安装

OpenStack是一个云计算平台的项目,其中Keystone是一个身份认证服务组件,它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限,并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请…

五、shell - 算术运算符

目录 1、简介 2、例子 ​​​​​​​1、简介 Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。expr 是一款表达式计算工具&#xff…

人工智能的技术研究与安全问题的深入讨论

人工智能(AI)作为当今世界技术领域的热门话题,吸引了广泛的关注和研究。本文将探讨人工智能技术的最新研究进展,并着重讨论与人工智能安全相关的问题。 引言 人工智能技术的迅速发展为我们的生活带来了翻天覆地的变化。随着科技的…

12月7-8日泰国曼谷,Flat Ads与你相约Affilliate World Asia

12月7-8日,Flat Ads将参加在泰国曼谷举办的Affiliate World Asia Conference,与众多行业人士共话全球流量领域新洞察,探讨行业现状与未来趋势。 据悉,Affiliate World Asia(以下简称AWA)是全球瞩目的移动互联网联盟超级盛会,也是亚洲区域内最大规模的互联网流量大会。这一展会为…

无公网IP环境如何远程访问本地内网搭建的Emby影音库服务器

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…

发朋友圈的重要性和黄金时间

一、为什么发朋友圈要选择时间发? 1. 增加曝光率:通过定时自动发朋友圈,可以让更多的人看到你的动态。 2. 提高互动率:定时自动发朋友圈可以保持你的朋友圈活跃度,提高与粉丝的互动率。 3. 增强品牌形象&#xff1a…

LeetCode(44)存在重复元素 II【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 存在重复元素 II 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xf…

Egg.js的方法扩展

Extend-application 方法扩展 eggjs的方法的扩展和编写 Egg.js可以对内部的五种对象进行扩展&#xff0c;以下是可扩展的对象、说明、this指向和使用方式。 application对象方法拓展 按照Egg的约定&#xff0c;扩展的文件夹和文件的名字必须是固定的。比如要对application扩…

羊大师提问,为什么吃得越咸越容易出现健康问题?

羊大师提问&#xff0c;为什么吃得越咸越容易出现健康问题&#xff1f; 在现代社会中&#xff0c;有一种追求咸味食物的趋势&#xff0c;许多人都钟爱于吃咸味食物。吃咸味食物往往容易导致健康问题&#xff0c;引发各种疾病。那么为什么吃的越咸越容易生病呢&#xff1f; 今…