《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05
第8章 形态学操作
形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向。
形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征。
例如,在识别手写数字时,能够通过形态学运算得到其骨架信息,在具体识别时,仅针对其骨架进行运算即可。形态学处理在视觉检测、文字识别、医学图像处理、图像压缩编码等领域都有非常重要的应用。
形态学操作主要包含:
- 腐蚀、
- 膨胀、
- 开运算、
- 闭运算、
- 形态学梯度(Morphological Gradient)运算、
- 顶帽运算(礼帽运算)、
- 黑帽运算等操作。
腐蚀操作和膨胀操作是形态学运算的基础,将腐蚀和膨胀操作进行结合,就可以实现开运算、闭运算、形态学梯度运算、顶帽运算、黑帽运算、击中击不中等不同形式的运算。
8.1 腐蚀
8.1.1 定义
腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。
腐蚀用来“收缩”或者“细化”二值图像中的前景,借此实现去除噪声、元素分割等功能。例如,在图8-1中,左图是原始图像,右图是对其腐蚀的处理结果。
在腐蚀过程中,通常使用一个结构元来逐个像素地扫描要被腐蚀的图像,并根据结构元和被腐蚀图像的关系来确定腐蚀结果。
8.1.2 函数
在OpenCV中,使用函数cv2.erode()实现腐蚀操作,其语法格式为:
dst=cv2.erode(src,kernel)
式中:
- dst是腐蚀后所输出的目标图像,该图像和原始图像具有同样的类型和大小。
- src是需要进行腐蚀的原始图像,图像的通道数可以是任意的。但是要求图像的深度必须是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。
- kernel代表腐蚀操作时所采用的结构类型。它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
8.1.3 程序示例
【例8.2】使用函数cv2.erode()完成图像腐蚀。
import cv2
import numpy as np
o=cv2.imread("erode.bmp",cv2.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(o,kernel)
cv2.imshow("orriginal",o)
cv2.imshow("erosion",erosion)
cv2.waitKey()
cv2.destroyAllWindows()
网友评论