1、开运算
先进行腐蚀再进行膨胀就叫做开运算。图像被腐蚀后,去除了噪声,但会压缩图像;对腐蚀过的图像进行膨胀处理,可以去除噪声并保持原有形状。
代码如下,
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
img = cv2.imread('cjavapy.png')
# 开:先腐蚀,再膨胀
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、闭运算
先进行膨胀再进行腐蚀就叫做开运算。它有助于关闭前景物体内部的小孔,或物体上的小黑点。
代码如下,
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
img = cv2.imread('cjavapy.png')
# 闭:先膨胀,再腐蚀
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
3、梯度运算
一张图片分别做膨胀与腐蚀操作,最后用膨胀后的图片减去腐蚀的图片,得到的新图片便是该图片的梯度运算。
梯度运算 (img) = 膨胀 (img) - 腐蚀 (img)
通过梯度运算可以得到前景物体的轮廓。
代码如下,
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
img = cv2.imread('cjavapy.png')
# 梯度=膨胀-腐蚀
kernel = np.ones((7,7),np.uint8)
# 膨胀
dilate = cv2.dilate(pie,kernel,iterations = 5)
# 腐蚀
erosion = cv2.erode(pie,kernel,iterations = 5)
# 运算
res = np.hstack((dilate,erosion))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
# morphologyEx() 实现开运算
# src:需要处理的图像
# cv2.MORPH_GRADIENT:指定为梯度运算
# kernel:卷积核,为元组,一般使用 numpy 进行赋值
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
4、顶帽运算(礼帽)
取出亮度高的地方
顶帽运算 = 原图像 - 开运算
开运算可以消除暗背景下的高亮区域,如果用原图减去开运算结果,就可以得到原图中灰度较亮的区域,所以又称白顶帽变换。
代码如下,
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
img = cv2.imread('cjavapy.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
5、底帽运算(黑帽)
取出亮度低的地方
底帽运算 = 原图像 - 闭运算
闭运算可以删除亮背景下的暗区域,那么用原图减去闭运算结果就可以得到原图像中灰度较暗的区域,所以又称黑底帽变换。
代码如下,
import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
img = cv2.imread('cjavapy.png')
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()