© Fu Xianjun. All Rights Reserved.
形态学,即数学形态学,是图像处理过程中一个非常重要的研究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征。
作用: 腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。
语法格式:
dst=cv2.erode(scr,kernel[,anchor[,iterations[,borerType[,borderValue]]]])
· kernel代表腐蚀操作时所采用的结构类型,它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
· anchor代表element结构中锚点的位置。该值默认为(-1,-1),在核的中心位置。
· iteration是是腐蚀操作迭代的次数,该值默认为1,即进行一次腐蚀操作。
· borderType代表边界样式,一般采用其默认BORDER_CONSTANT。
代码如下:
import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)
cv2.imshow('img', img)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用: 膨胀操作与腐蚀操作的作用是相反的,膨胀操作能对图像的边界进行扩张。
语法格式:
dst = cv2.dilate(scr,kernel[,iterations[,borderType[,borderValue]]])
代码如下:
import cv2
import numpy as np
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
cv2.imshow('img', img)
cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
dst=cv2.morphologyEx(scr,op,kernel[,anchor[,iterations[,borderType[,borderValue]]]])
作用: 开运算进行的操作是先将图像腐蚀,在对腐蚀的结果进行膨胀。开运算可以用于去噪、计数等。
语法格式:
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
代码如下:
import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('img', img)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用: 闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景进行连接。
语法格式:
opening=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
代码如下:
import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('img', img)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用: 礼帽运算是通过原始图像减去其开运算图像的操作。礼帽运算能获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息。
· 礼帽 = 原始输入-开运算结果
语法格式:
opening=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
代码如下:
import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('img', img)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
作用: 黑帽运算是通过闭运算图像减去原始图像的操作。黑帽运算能获取图像内部的小孔,或前景中的小黑点,或者得到比原始图像的边缘更暗的边缘部分。
· 黑帽 = 闭运算-原始输入
语法格式:
dst = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
代码如下:
import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('img', img)
cv2.imshow('blackhat', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()
作用: 用来返回一个用于形态学操作的指定大小和形状的结构元素。
语法格式:
retval=cv2.getStructuringElement(shape,ksize[,anchor])
·shape代表形状类型。
| 形状类型
类型 | 说明 |
---|---|
cv2.MORPH_RECT | 矩形结构元素。所有元素值都是1 |
cv2MORPH_CROSS. | 十字形结构元素。对角线元素值为1 |
cv2.MORPH_ELLIPSE | 椭圆结构元素 |
·ksize代表结构元素的大小。
形态学操作可以去除图像的噪声、小黑点等,在视觉检测、文字识别、医学图像处理、图像压缩编码等领域都有非常重要的应用。