图像形态学变换 膨胀和腐蚀 开闭运算 边缘检测 opencv实现

一. 官方文档:

dilate(膨胀):


函数原型 ↑
 

参数说明 ↑
 

    cv.erode(腐蚀)的使用和其类似。


二. 实验:膨胀和腐蚀

 1 # Writer : wojianxinygcl@163.com
 2 # Date  : 2020.3.22
 3 import cv2 as cv
 4 import numpy as np
 5 
 6 image = cv.imread("../paojie.jpg")
 7 image = cv.cvtColor(image,cv.COLOR_RGB2GRAY)
 8 # 得到二值图像 定义阈值为127
 9 #ret,thresh1 = cv.threshold(image,127,255,cv.THRESH_BINARY)
10 # 得到二值图像 自动计算合适的阈值
11 ret,thresh1 = cv.threshold(image,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
12 Black_and_White = thresh1.copy()
13 
14 # 得到腐蚀图像,3*3为卷积核大小
15 erode_result = cv.erode(thresh1,(3,3))
16 # 得到膨胀图像,3*3为卷积核大小
17 dilate_result = cv.dilate(thresh1,(3,3))
18 
19 cv.imshow('Black_and_White',Black_and_White)
20 cv.imshow("erode_result", erode_result)
21 cv.imshow("dilate_result",dilate_result)
22 cv.waitKey(0)
23 cv.destroyAllWindows()

三. 实验输出:


原图(左)、膨胀图像(中)、腐蚀图像(右) ↑
 

四. 实验:开闭运算

 1 # Writer : wojianxinygcl@163.com
 2 # Date   : 2020.3.22
 3 import cv2 as cv
 4 import numpy as np
 5 
 6 image = cv.imread("../paojie.jpg")
 7 image = cv.cvtColor(image,cv.COLOR_RGB2GRAY)
 8 # 得到二值图像 定义阈值为127
 9 #ret,thresh1 = cv.threshold(image,127,255,cv.THRESH_BINARY)
10 # 得到二值图像 自动计算合适的阈值
11 ret,thresh1 = cv.threshold(image,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
12 Black_and_White = thresh1.copy()
13 
14 # 闭运算
15 closing = cv.morphologyEx(thresh1, cv.MORPH_CLOSE, kernel=(3,3))
16 # 开运算
17 opening = cv.morphologyEx(thresh1, cv.MORPH_OPEN,  kernel=(3,3))
18 
19 cv.imshow('Black_and_White',Black_and_White)
20 cv.imshow("closing", closing)
21 cv.imshow("opening", opening)
22 cv.waitKey(0)
23 cv.destroyAllWindows()

五. 实验输出:


原图(左)、闭运算(中)、开运算(右) ↑
 

六. Morphological Gradient  形态学梯度 用于检测图像边缘,得到图像轮廓

膨胀和腐蚀的差值得到:图像边缘

函数:gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)


七. 实验结果:


膨胀-腐蚀=图像边缘(图像轮廓) ↑
 

八. 写在最后的话:

    创作不易,如果本文对您有帮助,记得点赞哦!


九. 版权声明:

    未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!

原文地址:https://www.cnblogs.com/wojianxin/p/12545642.html