首先自己随便写了一个单词,然后在周围画一些相对细一点的噪声。
# 读取原始图片
original = cv2.imread("romance.jpg")
# 构造一个全1的5*5矩阵
kernel = np.ones((5, 5), np.int8)
腐蚀
腐蚀(Erosion)是形态学图像处理中的一种基本操作,用于缩小图像中物体的边界。它的基本思想是用一个结构元素(structuring element)在图像上滑动,如果结构元素的所有像素与图像中的相应像素都匹配,则将结构元素的原点放置在当前像素位置。如果有任何一个像素不匹配,则将当前像素置为零(或者最小值),以使物体边界向内收缩。用于去除图像中的小对象、连接组件、细节等。
(𝐴⊖𝐵)(𝑥,𝑦)=min(𝑖,𝑗)∈𝐵[𝐴(𝑥+𝑖,𝑦+𝑗)](A⊖B)(x,y)=min(i,j)∈B[A(x+i,y+j)]
# 进行腐蚀操作
erosion = cv2.erode(original, kernel, iterations=1)
膨胀
膨胀(Dilation)是形态学图像处理中的另一种基本操作,与腐蚀相反,它用于增加图像中物体的边界。膨胀操作的基本思想是用一个结构元素在图像上滑动,如果结构元素的任何一个像素与图像中的相应像素匹配,则将结构元素的原点放置在当前像素位置,并将结构元素的所有像素与图像中的相应像素进行合并。这样,图像中的物体边界就会向外扩张。用于填充物体的孔洞、连接断开的组件、增加物体的大小等。
(𝐴⊕𝐵)(𝑥,𝑦)=max(𝑖,𝑗)∈𝐵[𝐴(𝑥+𝑖,𝑦+𝑗)](A⊕B)(x,y)=max(i,j)∈B[A(x+i,y+j)]
# 进行膨胀操作
dilate = cv2.dilate(original, kernel)
开运算
开运算(Opening)是形态学图像处理中的一种组合操作,由腐蚀操作和膨胀操作组成。它的基本思想是先对图像进行腐蚀操作,然后再对结果进行膨胀操作。开运算的主要作用是消除图像中的小物体、连接小的间隙以及平滑物体边界。用于去除图像中的小的白色噪声,同时保持物体的整体形状,也可以用于分割图像中的物体,并且能够在一定程度上保持物体的大小和形状不变。
Opening(A)=(A⊖B)⊕B
# 开运算
opening = cv2.morphologyEx(original, cv2.MORPH_OPEN, kernel)
闭运算
闭运算(Closing)是形态学图像处理中的另一种组合操作,也由腐蚀操作和膨胀操作组成,与开运算相反。闭运算的基本思想是先对图像进行膨胀操作,然后再对结果进行腐蚀操作。闭运算的主要作用是填充图像中的小洞、连接断开的物体以及平滑物体边界。用于去除图像中的小的黑色噪声,同时保持物体的整体形状,也可以用于填充图像中的空洞,并且能够在一定程度上保持物体的大小和形状不变。
Closing(A)=(A⊕B)⊖B
# 闭运算
closed = cv2.morphologyEx(original, cv2.MORPH_CLOSE, kernel)
梯度运算
梯度运算是形态学图像处理中的一种操作,用于检测图像中物体边界的位置。梯度运算通过计算图像的膨胀和腐蚀之间的差异来实现。具体来说,梯度运算的结果是原始图像与经过膨胀后图像的差异。用于检测物体的边缘或轮廓,并且可以帮助定位物体的位置和形状。通常,边界处的梯度值较大,而物体内部的梯度值较小。
Gradient(𝐴)=(𝐴⊕𝐵)−(𝐴⊖𝐵)Gradient(A)=(A⊕B)−(A⊖B)
# 梯度运算
gradient = cv2.morphologyEx(original, cv2.MORPH_GRADIENT, kernel)
礼帽
礼帽(Top Hat)是形态学图像处理中的一种操作,用于提取图像中的小细节或微弱的特征。礼帽运算可以将图像中的明亮区域和背景相比较,从而突出显示出与背景相比较明显的亮度变化。用于检测图像中的小物体、微小的结构变化、或者噪声等。
TopHat(A)=A−(Opening(A))
# 礼帽
tohat = cv2.morphologyEx(original, cv2.MORPH_TOPHAT, kernel)
黑帽
黑帽(Black Hat)运算是形态学图像处理中的一种操作,与礼帽运算相对应。黑帽运算用于提取图像中的暗区域或微弱的特征。与礼帽运算类似,黑帽运算可以将图像中的暗区域与背景相比较,从而突出显示出与背景相比较明显的暗度变化。用于检测图像中的小的暗物体、微小的结构变化、或者噪声等。
BlackHat(𝐴)=(Closing(𝐴))−𝐴BlackHat(A)=(Closing(A))−A
# 黑帽
blackhat = cv2.morphologyEx(original, cv2.MORPH_BLACKHAT, kernel)
import cv2
import numpy as np
# 读取原始图片
original = cv2.imread("romance.jpg")
# 构造一个全1的5*5矩阵
kernel = np.ones((5, 5), np.int8)
# 进行腐蚀操作
erosion = cv2.erode(original, kernel, iterations=1)
# 进行膨胀操作
dilate = cv2.dilate(original, kernel)
# 开运算
opening = cv2.morphologyEx(original, cv2.MORPH_OPEN, kernel)
# 闭运算
closed = cv2.morphologyEx(original, cv2.MORPH_CLOSE, kernel)
# 梯度运算
gradient = cv2.morphologyEx(original, cv2.MORPH_GRADIENT, kernel)
# 礼帽
tohat = cv2.morphologyEx(original, cv2.MORPH_TOPHAT, kernel)
# 黑帽
blackhat = cv2.morphologyEx(original, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow("Original", original)
cv2.imshow("Erosion", erosion)
cv2.imshow("Dilate", dilate)
cv2.imshow("Opening", opening)
cv2.imshow("Closed", closed)
cv2.imshow("Gradient", gradient)
cv2.imshow("Tohat", tohat)
cv2.imshow("Blackhat", blackhat)
cv2.waitKey(0)
cv2.destroyWindow()