前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV形态学处理使用技巧与应用演示(必会骚操作)

OpenCV形态学处理使用技巧与应用演示(必会骚操作)

作者头像
Color Space
发布2022-05-26 14:37:21
8400
发布2022-05-26 14:37:21
举报
文章被收录于专栏:OpenCV与AI深度学习

视觉/图像重磅干货,第一时间送达!

关于OpenCV形态学使用基础可以查看公众号免费的OpenCV视频教程,其中有详细介绍,本篇文章主要介绍形态学中一些实用但是容易被忽略的技巧与演示。

形态学中常用的方法有膨胀,腐蚀,开运算,闭运算,形态学梯度,顶帽,黑帽和击中击不中,大多以膨胀和腐蚀为基础操作,需要注意的是膨胀和腐蚀都是对图像中的高亮部分(二值图白色部分)处理起作用,如果是白色背景黑色目标要做取反操作,否则得到的结果是相反的。进入正题,技巧与应用场景介绍:

(1)膨胀的应用。膨胀的结果类似“领域扩张”,白色区域将会扩大,常用于断开区域的连接。如下图,假如想连接3条线

我们可以这么做:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
dilate(gray, gray, element);

虽然3段线段连成了1段,但是线的宽度明细也增加了,如果我不想线的宽度明显增加怎么办?答案是修改结构元素的Size值,比如为Size(1,15),这样增大竖直方向的膨胀力度(反之增大水平方向膨胀力度),效果如下:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(1, 15));
dilate(gray, gray, element);

(2)腐蚀的应用。腐蚀的结果类似“领域蚕食”,白色区域将会缩小,常用于连接区域的切断。下面的图像,假如只想保留水平线,该怎么操作?

同样在结构元素Size上做文章,设置Size()值为Size(60,1),不与它相似的区域结构将被腐蚀,效果如下:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(60, 1));
erode(gray, gray, element);

(3)开运算应用。比如下面的图像,如果想去除字母C区域周围的毛边,就可以用开运算。

代码与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
morphologyEx(gray, gray, MORPH_OPEN, element); //开运算

(4)闭运算应用。比如下面的图像,如果想去除字母C区域内部的黑色孔洞,就可以用闭运算。

代码与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(9, 9));
morphologyEx(gray, gray, MORPH_CLOSE, element); //闭运算

(5)形态学梯度应用。比如下面的图像,提取边缘或轮廓框架,就可以用形态学梯度。

代码与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(gray, gray, MORPH_GRADIENT, element); //形态学梯度

(6)顶帽应用。比如下面的图像,想提取C区域的边缘毛刺,就可以用顶帽操作。

代码与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
morphologyEx(gray, gray, MORPH_TOPHAT, element); //顶帽

(7)黑帽应用。比如下面的图像,想提取C区域的内部黑洞区域,就可以用黑帽操作。

代码与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(9, 9));
morphologyEx(gray, gray, MORPH_BLACKHAT, element); //黑帽

(8)自定义结构元素应用。特定的结构元素会特定的结构区域特别起作用。比如圆形结构元素对圆形区域效果特别好,但是OpenCV默认值提供了3中结构,不包含圆形,那么我们可以自己创建圆形结构元素,通过画圆或遍历像素的方法。如下图,我们分别用矩形结构元素和圆形结构元素腐蚀,查看对比效果:

矩形结构元素与效果:

代码语言:javascript
复制
Mat element = getStructuringElement(MORPH_RECT, Size(35, 35));
erode(gray, gray, element);

自定义圆形结构元素与效果(更好的保留了圆形结构):

代码语言:javascript
复制
Mat element = Mat::zeros(Size(35, 35), CV_8UC1);
circle(element, Point(17, 17), 18, Scalar::all(1), -1);
erode(gray, gray, element);

下载1:Pytoch常用函数手册

在「OpenCV与AI深度学习」公众号后台回复:Pytorch常用函数手册,即可下载全网第一份Pytorch常用函数手册,涵盖Tensors介绍、基础函数介绍、数据处理函数、优化函数、CUDA编程、多线程处理等十四章章内容。

下载2:145个OpenCV实例应用代码

—THE END—

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档