形态学操作——腐蚀与膨胀

预备知识

结构元(SE)

1、结构元的中心一般来说是放在其重心位置处,但原则上原点的选择是依赖于你要解决的问题的。
2、对图像操作时,我们要求结构元是矩形阵列。(在结构元的基础上添加较少的背景元素实现)
3、当结构元的中心位于原图像的边界时,要对原图像进行填充操作

2注意点中的填充阵列:
填充阵列
但是其实这样填充下来,只要给背景元素的权值赋0就和原来的一样了。
就像这样
这个阵列显然和下面的阵列不是一个类型
在这里插入图片描述
3注意点中的填充原图像
填充

原理

腐蚀

公式
该表达式表示:B对A的腐蚀使用一个z平移的B包含在A中的所有点z的集合。
效果:
效果
也就是B的中心在A中遍历之后,结构元素中没有背景元素(即全是前景元素)的B中心的点的集合。

膨胀

原理
效果
膨胀是腐蚀的对偶操作。相当于将B的中心沿着所有A的点遍历一遍,得到的B的所有元素的集合。

调用opencv库函数

#include <opencv2/opencv.hpp>
#include <iostream>
#include "windows.h"
#include <stdio.h>using namespace cv;
using namespace std;
int main()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);		//字体为绿色Mat srcImage = imread("D:\\opencv_picture_test\\形态学操作\\黑白.jpg");//判断图像是否加载成功if (srcImage.empty()){cout << "图像加载失败!" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;namedWindow("原图像", WINDOW_NORMAL);     //定义窗口显示属性imshow("原图像", srcImage);//进行腐蚀操作Mat element_erode = getStructuringElement(MORPH_RECT,Size(15,15));	//返回的是内核矩阵Mat dstImage;erode(srcImage, dstImage, element_erode);					//腐蚀操作//显示效果图imshow("【腐蚀效果图】", dstImage);//进行膨胀操作//获取自定义核Mat element_dilate = getStructuringElement(MORPH_RECT, Size(15, 15));Mat out;//进行膨胀操作dilate(srcImage,out, element_dilate);imshow("【膨胀效果图】", out);waitKey(0);return 0;
}

效果

图片

作用

腐蚀的作用

消除A中比结构元B小的部件。去除黏连像素以及噪声。
look
去除黏连像素

膨胀的作用

桥接裂缝,恢复连通性
作用:如图,由于无法实现理想的二值化,使得原本连通的像素集合被
分成不同的连通域,从而影响目标物的提取。可通过膨胀运算使其恢复
连通性。
look
这种方法比低通滤波有一个直接优点:形态学桥接可以直接得到一个二值化的图,
然而低通滤波则需要经过这样过程:二值图=>灰度图=>二值图。

另外需要了解的知识:

性质
look

之后的击中击不中变换中将会用到这样的知识。

上面是以二值图为例的,下面我们以灰度图作为例子。1
效果:使整个图像变暗且去除了局部较亮的像素
效果
效果:使整个图像变亮且去除了局部较暗的像素

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

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

相关文章

java集合转换_java各种集合的转换

内容&#xff1a;1、List转Array 2、Array转List3、String转int[],String[](对单个字符) 4、数组、List、Set、Map相互转换5、一行输入多个元素方法常用集合&#xff1a;Map、Set、List、Array、String1、List转Array&#xff…

10-礼帽与黑帽操作

cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) 第一个参数&#xff1a;图像对象名称 第二个参数&#xff1a;运算类型TOPHAT为礼帽运算 第三个参数&#xff1a;卷积核的大小 礼帽运算&#xff1a;原始的输入-开运算&#xff08;先腐蚀再膨胀&#xff09; 原始带刺儿&#xff…

2011 cnblogs开通--给力吧

在信息传递如此迅速的时代&#xff0c;自己慢慢的老去&#xff0c;是否要想写些什么&#xff0c;跟大家一起分享学习、工作、生活的酸甜苦辣&#xff0c;提高自己的各方面的能力;往后将慢慢记录自己的程序人生吧&#xff0c;就什么多了&#xff0c;作为自己cnblogs第一篇吧^_^转…

Android----获取activity上所有的控件

01/**02 * note 获取该activity所有view03 * author liuh04 * */05 public List<View> getAllChildViews() {06 View view this.getWindow().getDecorView();07 return getAllChildViews(view);08 }09 10 private List<View> …

微信小程序 查找兄弟节点_使用C ++程序在链接列表中查找节点

微信小程序 查找兄弟节点Given a linked list and an integer N, you need to find and return index where N is present in the Linked List. Return -1 if n is not present in the Linked List. 给定一个链表和一个整数N&#xff0c;您需要查找并返回索引&#xff0c;其中链…

形态学操作——开闭运算、顶帽底(黑)帽变换

膨胀和腐蚀运算的问题&#xff1a; 边缘形状发生了变化&#xff0c;膨胀发生了扩张&#xff0c;腐蚀发生了收缩 目标物体变形&#xff0c;对识别时的特征提取会造成影响 解决方法&#xff1a; 开操作: B对A的开操作就是先B对A腐蚀&#xff0c;紧接着用B对结果进行膨胀 先腐…

java 基础实战_Java基础实战(三)

是否是否是否是否获取字符串字符数组大写?小写?数字?非字母与数字大写字母小写字母数字i结束ii1第一步 拆分字符串为字符数组&#xff1a;static void count(String str) {// 将字符串拆分为字符数组char[] charArray str.toCharArray();}第二步 定义相关变量记录结果&…

11-图像梯度-Sobel算子

图像梯度是指图像某像素在x和y两个方向上的变化率&#xff08;与相邻像素比较&#xff09;&#xff0c;是一个二维向量&#xff0c;由2个分量组成&#xff0c;X轴的变化、Y轴的变化 。 其中X轴的变化是指当前像素右侧&#xff08;X加1&#xff09;的像素值减去当前像素左侧&…

给IE有效指定编码

<title>下一站</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> IE每次打开&#xff0c;均是一片空白&#xff0c;查看右键&#xff0d;编码&#xff0c;显示是GB2312。要手功改为UTF-8后才能正常显示页面…

形态学操作——击中击不中变换

操作目的 HitMiss变换是形态检测的一个工具&#xff0c;通过定义形状模板可以在图像中获取同一形状物体的位置坐标。 算法讲解 1、用击中结构去腐蚀原始图像得到击中结果X&#xff08;这个过程可以理解为在原始图像中寻找和击中结构完全匹配的模块&#xff0c;匹配上了之后&…

stack.pop()方法_C.示例中的Stack.Pop()方法

stack.pop()方法C&#xff03;Stack.Pop()方法 (C# Stack.Pop() method) Stack.Pop() method is used to remove an object from the top of the stack. The method removes and returns the object from the top. Stack.Pop()方法用于从堆栈顶部删除对象。 该方法从顶部删除并…

java list的作用_集合框架(List集合的特有功能概述和测试)

package cn.itcast_03;import java.util.ArrayList;import java.util.List;/** List集合的特有功能&#xff1a;* A:添加功能* void add(int index,Object element):在指定位置添加元素* B:获取功能* Object get(int index):获取指定位置的元素* C:列表迭代器* ListIterator li…

12-图像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一个参数&#xff1a;当前的图像对象名称 第二个参数&#xff1a;当前图像的深度&#xff0c;通常情况下指定为-1&#xff0c;表示输出和输入的深度是一样的&#xff1b;cv2.CV_64F可以存6字节的大小&#xff0c;为了方便后面的取…

新的一年新希望,百忙中继续学习

公司来了一批新同事&#xff0c;我又忙于购买设备&#xff0c;布置办公桌了。 小林建议我找一份更合适的工作&#xff0c;目前的我其实是在混日子&#xff0c;因为我并不擅长沟通与销售。 暂时还是保持这样吧&#xff0c;我还需要一定时间来积蓄力量。 转载于:https://www.cnbl…

Oracle Internal Event:10200 Consistent Read诊断事件

10200(consistent read buffer status)内部诊断事件可以用于探测一致性读CR(consistent read)块的访问情况&#xff0c;虽然cr读的统计信息可以从v$sysstat或AWR/statspack中获取&#xff0c;但是10200 event还是我们研究Consistent Read一致性读的有力工具。该事件可以通过在会…

多线程循环输出abcc++_C ++循环| 查找输出程序| 套装4

多线程循环输出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int A 5;int fun(){return A--;}int main(){int A 5;while (fun()) {cout << A ::A << " ";}return 0;}Output: 输出&#xff1a; 9 8 7 6 5Explana…

Opencv——图像金字塔与图像尺寸缩放

主要讲解 1、resize()函数调用 函数定义&#xff1a; 调用方式&#xff1a; resize(srcImage, dstImage, Size(64, 128)); //对图片进行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6个参数的含义&#xff1a; INTER_NEAREST:最邻近插值 (放大好用) INTER_ARE…

java nature_Java中BufferedReader和scanner的对比 - nature

原地址&#xff1a;http://blog.sina.com.cn/s/blog_5fd837410100rtwk.html Scanner 和BufferedReader同样能实现将键盘输入的数据送入程序&#xff0c; import java.io.*; import java.util.Scanner; public class C { public static void main(String []args) throws IOExcep…

13-Canny边缘检测

Canny边缘检测主要思路步骤如下&#xff1a; 1&#xff0c;使用高斯滤波器&#xff0c;以平滑图像&#xff0c;滤除噪声 2&#xff0c;计算图像中每个像素点的梯度强度和方向 3&#xff0c;应用非极大值抑制&#xff0c;以消除边缘检测带来的杂散响应 4&#xff0c;应用双阈值检…

c# uri.host_C#| Uri.IsHexEncoding()方法与示例

c# uri.hostUri.IsHexEncoding()方法 (Uri.IsHexEncoding() Method) Uri.IsHexEncoding() method is a static method or Uri class. Which is used to return that given string is hex-encoded or not? If the given string is hex coded then it returns true otherwise it…