OpenCV 构造卷积核getStructuringElement
一 构造卷积核
1 cv2.getStructuringElement
rectkernel = cv2.getStructuringElement(shape, ksize, anchor=None)
shape: 表示内核的形状
-
Enumerator MORPH_RECT 矩形 MORPH_CROSS 十字型 MORPH_ELLIPSE 椭圆形
ksize: 内核的尺寸
-
指定形状(元组)
anchor: 锚点的位置
一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得
getStructuringElement函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
示例程序01
rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (6, 3)) print(rectKernel, type(rectKernel)) sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) print(sqKernel, type(sqKernel))
运行结果01
[[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]] <class 'numpy.ndarray'>
[[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]] <class 'numpy.ndarray'>
示例程序02
sqKernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (9, 5)) print(sqKernel, type(sqKernel)) sqKernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (10, 6)) print(sqKernel, type(sqKernel))
运行结果02
[[0 0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0 0]
[1 1 1 1 1 1 1 1 1]
[0 0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0 0]] <class 'numpy.ndarray'>
[[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]
[1 1 1 1 1 1 1 1 1 1]
[0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0]] <class 'numpy.ndarray'>
双数话默认选后边那个,最好为奇数
示例程序03
sqKernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 5)) print(sqKernel, type(sqKernel))
运行结果03
[[0 0 0 0 1 0 0 0 0]
[0 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]
[0 1 1 1 1 1 1 1 0]
[0 0 0 0 1 0 0 0 0]] <class 'numpy.ndarray'>