图像开运算
图像开运算是图像依次经过腐蚀,膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。
开运算=膨胀
图像开运算主要使用函数morphologyEx,它是形态学拓展的一组函数,其参数cv2.MORPH_OPEN对应开运算,其原型如下:
dst = cv2.morphologyEx(src, cv2.MORPH,kernel)
代码如下:
import cv2 import numpy as np src = cv2.imread("src.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) if cv2.waitKey() == 27: cv2.destroyAllWindows()
效果如下
结果仍然存在噪声,可以增大卷积核面积消除噪声,例如设置为10*10,效果如下:
图像闭运算
图像闭运算是图像依次经过膨胀,腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物理内部的小孔或物体上的小黑点。
闭运算=腐蚀
主要使用morphologyEx函数
dst = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)
代码如下:
import cv2 import numpy as np src = cv2.imread("src.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) if cv2.waitKey() == 27: cv2.destroyAllWindows()
效果如下:
图像梯度运算
图像梯度运算时膨胀图像减去腐蚀图像的结果,得到图像的轮廓图,其中二值图像1表示白色,0表示黑色。
梯度运算 = 膨胀-腐蚀
主要使用morphologyEx函数
dst = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
代码如下:
import cv2 import numpy as np src = cv2.imread("src.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) if cv2.waitKey() == 27: cv2.destroyAllWindows()
效果如下:
图像顶帽运算
图像顶帽运算时原始图像减去图像开运算的结果,得到图像的噪声。
顶帽运算=原始图像-开运算
dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)
代码如下:
import cv2 import numpy as np src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED) # 设置卷积核 kernel = np.ones((5, 5), np.uint8) # 图像开运算 result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel) # 显示图像 cv2.imshow("src", src) cv2.imshow("result", result) if cv2.waitKey() == 27: cv2.destroyAllWindows()
效果如下:
获取更多细节,可以加大卷积核的面积,例如10*10
图像黑帽运算
图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景中的小黑点
黑帽运算=闭运算-原始图像
dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)
代码如下:
import cv2 import numpy as np src = cv2.imread("src.png", cv2.IMREAD_UNCHANGED) # 设置卷积核 kernel = np.ones((10, 10), np.uint8) # 图像开运算 result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel) # 显示图像 cv2.imshow("src", src) cv2.imshow("result", result) if cv2.waitKey() == 27: cv2.destroyAllWindows()
效果如下:
转自:https://blog.csdn.net/Eastmount/article/details/83692456