CSDN博客地址

[Python图像处理]九.图像形态学相关运算

图像开运算

图像开运算是图像依次经过腐蚀,膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。

开运算=膨胀

图像开运算主要使用函数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

posted @ 2020-07-09 19:42  Yi_warmth  阅读(314)  评论(0编辑  收藏  举报
CSDN博客地址