1.基本原理
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:
开运算:先腐蚀,后膨胀
下面是借鉴一位博主写的开运算效果图:
作用:用来消除小的物体,平滑形状边界,并且不改变其面积。可以去除小颗粒噪声,断开物体之间的粘连。
2.函数原形
图像开运算使用函数 morphologyEx() ,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
参数:
dst 表示处理的结果;
src 表示原始图像;
cv2.MORPH_OPEN 表示开运算;
kernel 表示卷积核。
代码如下所示:
import cv2
import numpy as np
#图片读取
image = cv2.imread("E:/pythonProject/01.png", cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((10, 10), np.uint8)
#图像开运算
result = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)
#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下所示:
由上面结果可以看到,仍然有噪声存在,可以将增大卷积核的大小。将卷积核设置为10*10,
核心代码:
kernel = np.ones((10, 10, np.uint8)
result = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
运行结果如下所示:
开运算总结:
(1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
(2)开运算是一个基于几何运算的滤波器。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。
1.基本原理
图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:
闭运算:先膨胀,后腐蚀
下图借鉴是一篇博客写的闭运算效果图:
2.函数原型
图像闭运算使用函数 morphologyEx() , 它是形态学扩展的一组函数,其参数 cv2.MORPH_CLOSE 对应闭运算。
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
其中,参数:
dst 表示处理的结果;
src 表示原图像;
cv2.MORPH_CLOSE 表示闭运算;
kernel表示卷积核。
代码如下所示:
import cv2
import numpy as np
#图片读取
image = cv2.imread("E:/pythonProject/j.png", cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((10, 10), np.uint8)
#图像闭运算
result = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)
#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下所示:
当卷积核为5*5时,噪音并没有完全消除,下面设置卷积核为10*10
核心代码:
kernel = np.ones((10, 10), np.uint8)
result = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
输出结果如下所示:
闭运算总结:
(1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
(2)闭运算是通过填充图像的凹角来滤波图像的。
(3)结构元素大小的不同将导致滤波效果的不同。
(4)不同结构元素的选择导致了不同的分割。
1.基本原理
图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。 如下图所示:
梯度运算:膨胀图像 — 腐蚀图像
2.函数原型
图像梯度运算使用的函数 morphologyEx(),其参数 cv2.MORPH_GRADIENT 对应 梯度运算。
morphologyEx() 函数形式如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
其中,参数:
dst表示处理的结果;,
src表示原图像;,
cv2.MORPH_GRADIENT表示梯度运算;,
kernel表示卷积核。
代码如下所示:
import cv2
import numpy as np
#图片读取
image = cv2.imread("E:/pythonProject/004.png", cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5, 5), np.uint8)
#图像梯度运算
result = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
#图像显示
cv2.imshow("image", image)
cv2.imshow("result", result)
#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下图所示: