Erode腐蚀,Dilate膨胀,这两个形态学函数总是成对出现,前者可以消除较小独点如噪音,后者可以使不连通的图像合并成块。

void cvErode( const CvArr* src, CvArr*
dst, IplConvKernel* element=NULL, int iterations=1 )

void cvDilate( const CvArr* src,
CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

这两个函数的参数相同,是一对“相反”的函数(这里的相反并不是指后一个函数可以将前一个函数处理的图像恢复,而是一个缩小图像团块,一个放大图像的团块)

void
cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int
iterations=1 );

  • 1.src
  • 输入图像.
  • 2.dst
  • 输出图像.
  • 3.element
  • 用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素
  • 4.iterations
  • 腐蚀的次数
  • 腐蚀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

void
cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int
iterations=1 );

1.src

输入图像.

2.dst

输出图像.

3.element

用于膨胀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素

4.iterations

膨胀的次数

膨胀可以重复进行 (iterations) 次. 对彩色图像,每个彩色通道单独处理。

CreateStructuringElementEx:IplConvKernel*
cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

cvCreateStructuringElementEx

创建结构元素

IplConvKernel*
cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y,

int
shape, int* values=NULL );

cols

结构元素的列数目

rows

结构元素的行数目

anchor_x

锚点的相对水平偏移量

anchor_y

锚点的相对垂直偏移量

shape

结构元素的形状,可以是下列值:

CV_SHAPE_RECT,
长方形元素;

CV_SHAPE_CROSS,
交错元素 a
cross-shaped element;

CV_SHAPE_ELLIPSE,
椭圆元素;

CV_SHAPE_CUSTOM,
用户自定义元素。这种情况下参数 values 定义了 mask,即象素的那个邻域必须考虑。

values

指向结构元素的指针,它是一个平面数组,表示对元素矩阵逐行扫描。(非零点表示该点属于结构元)。如果指针为空,则表示平面数组中的所有元素都是非零的,即结构元是一个长方形(该参数仅仅当shape参数是
CV_SHAPE_CUSTOM 时才予以考虑)。

函数cv CreateStructuringElementEx 分配和填充结构
IplConvKernel, 它可作为形态操作中的结构元素。

CreateStructuringElementEx举例

举个例子比较好说清楚

比如一个图

00000

01110

00000

用一个cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

00000

01000

00000

理解:cvCreateStructuringElementEx( 3,1,0 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵,即结构元素为[1(anchor),1,1],如果该矩阵里元素全为非零,则将其转化为同样大小只包含一个非零元素,而该非零元素的位置是(0,0),即锚点位置,效果上讲,可以看做是对图像从y方向上进行截断。同理cvCreateStructuringElementEx(
3,1,1 0,CV_SHAPE_RECT)中的3,1表示要腐蚀的对象是一个3列1行的矩阵。

假如用下面这个去腐蚀图像,中心是在右下角1 0 01 1 01 1 1 那么应该怎么表示呢?

理论上应该是int mask[9] = {1, 0, 0, 1, 1, 0, 1, 1, 1}; IplConvKernel* strel =
cvCreateStructuringElementEx( 3, 3, 0, 2, CV_SHAPE_CUSTOM, mask );其中0,2可按自己要求设置。

结构元素的不同设定对于处理结果有着重要影响,当需要对y方向进行腐蚀操作时,同理,可如下操作。

比如一个图

01000

01000

01000

而用了一个cvCreateStructuringElementEx( 1,3,1 0,CV_SHAPE_RECT)的元素来腐蚀,则结果为

00000

01000

00000

此时创建的结构元素为1x3的列矩阵,即[1,1(anchor),1]的转置矩阵,如右图 所示,锚点位置在第二行一列处,即(1,0),具体处理的思路同上所述。图像处理的效果是从x方向上进行了截断,一定程度上剔除该方

cvErode和cvDilate腐蚀和膨胀函数的更多相关文章

  1. 膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现

    前言 膨胀就是对图中的每个像素取其核范围内最大的那个值,腐蚀就相反.这两个操作常用来突出显示图的某个高亮部分或者昏暗部分以及去噪.本文展示两个分别对图像进行膨胀和腐蚀的例子. 膨胀和腐蚀函数 cvEr ...

  2. opencv2函数学习之erode、dilate:图像腐蚀和膨胀

    图像腐蚀和图像膨胀是图像中两种最基本形态学操作. ,-), ,int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphol ...

  3. OpenCV学习笔记——图像的腐蚀与膨胀

    顺便又复习了一下cvcopy如何进行图像拼接(最近觉得打开多幅图像分别看不如缩小掉放拼接到一幅图像上对比来的好) 首先把拼接的目标图像设置兴趣区域ROI,比如我有一个total,要把a.b.c分别从左 ...

  4. 基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法。

    因未测试其他作者的算法时间和效率,本文不敢自称是最快的,但是速度也可以肯定说是相当快的,在一台I5机器上占用单核的资源处理 3000 * 2000的灰度数据用时约 20ms,并且算法和核心的大小是无关 ...

  5. SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法。

    因未测试其他作者的算法时间和效率,本文不敢自称是最快的,但是速度也可以肯定说是相当快的,在一台I5机器上占用单核的资源处理 3000 * 2000的灰度数据用时约 20ms,并且算法和核心的大小是无关 ...

  6. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

    腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...

  7. OpenCV(6)-腐蚀和膨胀

    腐蚀和膨胀属于形态学操作. 腐蚀和膨胀 腐蚀是指:将卷积核B滑过图像A,找出卷积核区域内最小像素值作为锚点像素值.这一操作可以扩大低像素值区域. 膨胀是指:将卷积核B滑过图像A,找出卷积核区域内最大像 ...

  8. 【python-opencv】17-形态学操作-腐蚀与膨胀

    形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了: 形态学操作一般作用于二值化图(也可直接作用于原图),来连接相邻的元素 ...

  9. 二值形态学——腐蚀与膨胀 及 C语言代码实现

    参考文献:数字图像处理(第三版) 何东健 西安电子科技大学出版社 二值形态学中的运算对象是集合, 但实际运算中, 当涉及两个集合时并不把它们看作是互相对等的. 一般设A为图像集合, S为结构元素, 数 ...

随机推荐

  1. 拾遗:Go 基础

    这 Go,越看越像是 C 和 Python 的混合体--! gofmt 用于格式化代码,缩进使用 tab,而不是空格:Python 官方则建议使用空格,而不是 tab package Go 惯例,使用 ...

  2. org.apache.hadoop.hbase.master.HMasterCommandLine: Master exiting java.lang.RuntimeException: HMaster Aborted

    前一篇的问题解决了,是 hbase 下面lib 包的jar问题,之前写MR的时候加错了包,替换掉了原来的包后出现另一问题:@ubuntu:/home/hadoop/hbase-0.94.6-cdh4. ...

  3. JavaScript小实例-文字跑马灯效果

    我们常常能看到显示屏上字体的滚动以及手机弹幕等,下面所示代码就是一个简易的文字跑马灯的效果: <!DOCTYPE html> <html> <head lang=&quo ...

  4. Mongodb安装遇到的问题

    今天我第一次接触MongoDB,在安装过程中,因为对这个东西不了解,报错了我也不知道是哪里的错,还在网上查了半天资料,后来我懂了,感觉上午就是在浪费时间,是我没睡醒,没睡醒.. 在安装上MongoDB ...

  5. WordTEX

    https://www.andrew.cmu.edu/user/twildenh/wordtex/

  6. leetcood学习笔记-118-杨辉三角

    题目描述: 第一次提交: class Solution: def generate(self, numRows: int): l = [] for i in range(numRows): n = [ ...

  7. Mysql 编译报错 g++: internal compiler error: Killed (program cc1plus) 解决办法

    g++: internal compiler error: Killed (program cc1plus) 解决办法 g++: internal compiler error: Killed (pr ...

  8. [JZOJ6359] 【NOIP2019模拟2019.9.15】小ω的树

    题目 题目大意 给你一棵树,带点权和边权. 要你选择一个联通子图,使得点权和乘最小边权最大. 支持修改点权操作. 思考历程 显然,最先想到的当然是重构树了-- 重构树就是在做最大生成树的时候,当两个联 ...

  9. 对每一个IO操作的返回都要进行判断

    对每一个IO操作的返回都要进行判断 我们业务代码中有很多进行mysql.redis.文件.curl等的io操作,对每一个io操作我们都要对其返回值进行判断,然后做对应的处理,加日志信息或者抛出异常状态 ...

  10. opencv-霍夫直线变换与圆变换

    转自:https://blog.csdn.net/poem_qianmo/article/details/26977557 一.引言 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信 ...