在使用Opencv对图像进行形态学(腐蚀、膨胀、开、闭运算等)操作时,需要有一个“kernel”,这个核可以自定义生成,也可以使用cv2.getStructuringElement()
函数生成核。
函数的参数情况如下:
kernel = cv2.getStructuringElement(shape, ksize)
参数shape代表形状类型,有3种:
- cv2. MORPH_RECT:矩形结构元素(矩形卷积核),所有元素值都是1
- cv2. MORPH_CROSS:十字形结构元素(十字形卷积核),对角线元素值都是1
- cv2. MORPH_ELLIPSE:椭圆形结构元素
参数ksize代表形状的大小,例如ksize=(7,7)
示例程序:
import cv2
import numpy as np
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))
kernel3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
print(kernel1)
print('\n', kernel2)
print('\n', kernel3)
# 输出为:
# [[1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]]
#
# [[0 0 1 0 0]
# [0 0 1 0 0]
# [1 1 1 1 1]
# [0 0 1 0 0]
# [0 0 1 0 0]]
#
# [[0 0 1 0 0]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [1 1 1 1 1]
# [0 0 1 0 0]]
当shape
的参数为 cv2.MORPH_RECT 时,输出的是矩形全是1矩阵,此时输出的矩阵格式是ndarray
格式,所以可以用numpy
来代替:
import numpy as np
kernel3 = np.ones((5,5))
#输出为
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]