【OpenCV Python】核心操作--形态学转换

     形态学转换是针对图像形状进行的简单操作,一般是指针对二值化图像进行的操作,常见的形态学转换包括腐蚀,膨胀,开运算等。

1.腐蚀

顾名思义,腐蚀是对前景物体的边缘进行腐蚀掉,形成如现实中一样的腐蚀效果,其原理如下:

卷积核沿着图像滑动,如果卷积核对应区域的图像像素值都是1,则卷积核中心对应的像素值保持不变,反之则全变成0,所以在图像边缘区域,部分为0,部分为1的区域都会变成0,再往里面则会保持不变。

opencv提供erode(src, kernel,iterations)函数进行腐蚀操作,而且腐蚀操作,也可以去除二值化图形里的一些噪点

例如:

img =cv2.imread("test2.png")

kernel = np.ones((5,5),np.uint8)

dst = cv2.erode(img,kernel)

【OpenCV Python】核心操作--形态学转换_第1张图片

可以看出,相对于左边原图,右边腐蚀之后的图形有明显腐蚀效果,而且噪声被除去

2.膨胀

膨胀可以理解为腐蚀的反操作,膨胀的原理是:

同样的卷积核沿着图像滑动,只要卷积核对应的图像像素值有一个是1,则这块区域全部变成1.

使用cv2.dilate(src , kernel)函数就可以实现膨胀操作

例如:

img= cv2.imread("test2.png")

kernel= np.ones((5,5), np.uint8)

dst= cv2.dilate(img,kernel)

  【OpenCV Python】核心操作--形态学转换_第2张图片

屏幕剪辑的捕获时间:2018/4/9 21:11

 

3.开运算:

开运算就是先进行腐蚀,在进行膨胀,opencv提供函数cv2.morphologyEx(src, 运算方式,kernel)

来实现开运算

值得注意的是:

 1)如果先进行腐蚀去除了噪点,但原图形的形状也被破坏,此时再使用膨胀就可以恢复回去,这是开运算存在的意义

 2)直接使用cv2.morphologyEx和先使用cv2.erode再使用cv2.dilate函数的效果一样

 

例如:

img =cv2.imread("test2.png")

kernel = np.ones((5,5), np.uint8)

dst=cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel)

  【OpenCV Python】核心操作--形态学转换_第3张图片

屏幕剪辑的捕获时间:2018/4/9 21:22

 

 

 

4.闭运算

闭运算就是开运算的逆过程,先进行膨胀,在腐蚀,原理和开运算一样,可以用于去除二值化图像的背景色噪点。

例如:

img =cv2.imread("test.png")

kernel =np.ones((5,5) , np.uint8)

dst=cv2.morphologyEx(img, cv2.MORPH_CLOSE,kernel)

  【OpenCV Python】核心操作--形态学转换_第4张图片

屏幕剪辑的捕获时间:2018/4/9 21:28

 

可以看出白色图形里的黑色噪点已经被去除。

 

 

5.形态学梯度:

其实就是图像的膨胀和腐蚀之后两张图形的差,其结果就像原图形的轮廓

例如:

 

img = cv2.imread("test2.png")

kernel = np.ones((5,5) , np.uint8)

dst= cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)

 【OpenCV Python】核心操作--形态学转换_第5张图片

 屏幕剪辑的捕获时间: 2018/4/9 21:31

 

 

 

你可能感兴趣的:(【OpenCV Python】核心操作--形态学转换)