(OpenCV+Python)图像腐蚀膨胀 开闭运算 线性滤波 非线性滤波.docx
《(OpenCV+Python)图像腐蚀膨胀 开闭运算 线性滤波 非线性滤波.docx》由会员分享,可在线阅读,更多相关《(OpenCV+Python)图像腐蚀膨胀 开闭运算 线性滤波 非线性滤波.docx(21页珍藏版)》请在第一文库网上搜索。
1、图像腐蚀与膨胀我们在前两次教程中概述了 OPenCV对于图像的滤波,通常对于一个实战项 目而言,滤波之后的下一步操作就是图像的形态学处理了,从本次教程开始,我 们正式步入了 OPenCV图像形态学处理的部分。形态学(morphology) 一词通常表示生物学的一个分支,该分支主要研究动 植物的形态和结构。而我们图像处理中指的形态学,往往表示的是数学形态学。 下面一起来了解数学形态学的概念。数学形态学是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形 态学图像处理的基本理论。其基本的运算包括:二值腐蚀和膨胀、二值开闭运算、 骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、ToP-hat变换
2、、颗粒分析、 流域变换、灰值腐蚀和膨胀、灰值开闭运算、灰值形态学梯度等。简单来讲,形态学操作就是基于形状的一系列图像处理操作。OPenCV为进 行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种,他 们是:膨胀与腐蚀(DilatiOn与Erosion)o膨胀与腐蚀能实现多种多样的功能,主要如下消除噪声。分割出独立的图像元素,在图像中连接相邻的元素。寻找图像中的明显的极大值区域或极小值区域。求出图像的梯度。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。膨胀就是图 像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。腐 蚀就是原图中的高亮部分被腐蚀,”领
3、域被蚕食”,效果图拥有比原图更小的高亮 区域。月彭胀其实:膨胀就是求局部最大值的操作。按数学方面来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,我 们称之为A)与核(我们称之为B)进行卷积。核可以是任何的形状和大小,它拥有一个单独定义出来的参考点,我们称其 为锚点。多数情况下,核是一个小的中间带有参考点和实心正方形或者圆盘,其 实,我们可以把核视为模板或者掩码。而膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区 域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。这样就会使图 像中的高亮区域逐渐增长。如下图所示,这就是膨胀操作:我们来看一下函数原型:cv2. dila
4、te (img,kernel,iterations)-dst第一个参数:img指需要膨胀的图。第二个参数:kernel指膨胀操作的内核,默认是一个简单的3X3矩阵,我们 也可以利用getStructuringElement O函数指明它的形状。第三个参数:iterations指的是膨胀次数,省略是默认为1。dst则为返回的图像。定义卷积核需要用到Numpy中的函数,它可以定义一个矩形的卷积核结构 元素,我们来看一下代码:import cv2import numpy as npimg = cv2.imread(,01 .jpg,O)kernel =np.ones(5,5),np.uint8)di
5、ct = cv2.dilate(img,kernel,iterations =I)cv2.imshow(,org,img)cv2.imshow(resultn,dict)cv2.waitKey(0)cv2.destroy AllWindowsO我们定义了一个5*5的矩形卷积核,效果:HuX MulX事实上,在某些情况下,我们可能需要椭圆形/圆形的内核。因此,为此, OpenCV具有一个函数cv.getStructuringElement ()。我们只需传递内核的形状和 大小,即可获得所需的内核,函数原型:retval=cv.getStructuringElement(shape, ksize,
6、 anchor)这个函数的第一个参数表示内核的形状,有三种形状可以选择。矩形:MORPH_RECT交叉形:MORPH_CROSS椭圆形:MORPH_ELLIPSEIlll 1OOlO 00 0 10 01111111111001001111111111111111111111111001001111 100 10 000 10 0十字形结构矩形结构精国结构第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以 及dilate函数之前,先定义一个变量来获得。getStructuringElement函数的返U值:对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点
7、。element形状唯一依赖锚点位置,其他情况下, 锚点只是影响了形态学运算结果的偏移。我们看一下代码:import cv2import numpy as npimg = cv2.imread(,01 .jpg,O)kernel =cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)dict =cv2.dilate(img,kernel,iterations = I)cv2.imshow(norgn,img)cv2.imshow(nresultn,dict)cv2.waitKey(0)cv2.destroy AllWindowsO至于卷积核的形状我
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV+Python图像腐蚀膨胀 开闭运算 线性滤波 非线性滤波 OpenCV Python 图像 腐蚀 膨胀 开闭 运算 线性 滤波 非线性
