一. 图像开运算
1.基本原理
图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。如下图所示:
开运算(img) = 膨胀( 腐蚀(img) )
下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。
形态学应用——图像开运算与闭运算_图像开运算和闭运算-CSDN博客
2.函数原型
图像开运算主要使用的函数morphologyEx,它是形态学扩展的一组函数,其参数cv2.MORPH_OPEN对应开运算。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
参数dst表示处理的结果,src表示原图像,cv2.MORPH_OPEN表示开运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
运行结果如下图所示:
3.代码实现
完整代码如下所示:
#encoding:utf-8
import cv2
import numpy as np
#读取图片
src = cv2.imread('test01.png', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5), np.uint8)
#图像开运算
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下图所示,可以看到噪声已经被去除了。
但是结果result中仍然有部分噪声,如果想去除更彻底将卷积设置为10*10的。
kernel = np.ones((10,10), np.uint8)
result = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)
二. 图像闭运算
1.基本原理
图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:
闭运算(img) = 腐蚀( 膨胀(img) )
下图是hanshanbuleng博主提供的开运算效果图,推荐大家学习他的文章。
2.函数原型
图像闭运算主要使用的函数morphologyEx,其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
参数dst表示处理的结果,src表示原图像, cv2.MORPH_CLOSE表示闭运算,kernel表示卷积核。下图表示5*5的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。
运行结果如下图所示:
3.代码实现
完整代码如下所示:
#encoding:utf-8
import cv2
import numpy as np
#读取图片
src = cv2.imread('test03.png', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((10,10), np.uint8)
#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下图所示,可以看到中间的噪声去掉。
三. 图像梯度运算
1.基本原理
图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。如下图所示:
梯度运算(img) = 膨胀(img) - 腐蚀(img)
2.函数原型
图像梯度运算主要使用的函数morphologyEx,参数为cv2.MORPH_GRADIENT。其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
参数dst表示处理的结果,src表示原图像, cv2.MORPH_GRADIENT表示梯度运算,kernel表示卷积核。5*5的卷积核可以采用函数 np.ones((5,5), np.uint8) 构建。
运行结果如下图所示:
3.代码实现
完整代码如下所示:
#encoding:utf-8
import cv2
import numpy as np
#读取图片
src = cv2.imread('test04.png', cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((10,10), np.uint8)
#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下图所示,可以看到中间的噪声去掉。