依赖库
首先,我们需要导入必要的库:
import cv2
import numpy as np
cv2
是OpenCV的Python接口,用于图像处理。numpy
是一个用于科学计算的库,我们用它来创建结构元素。
显示图像的函数
我们定义了一个函数 show_img
来显示图像:
def show_img(name, img):
cv2.imshow(name, img) # 使用OpenCV的imshow函数显示图像
cv2.waitKey(0) # 等待任意键被按下
cv2.destroyAllWindows() # 关闭所有OpenCV创建的窗口
读取图像
使用 cv2.imread
函数读取图像文件,并将其转换为灰度图像:
img = cv2.imread('sun.jpg', cv2.IMREAD_GRAYSCALE)
请确保将 'sun.jpg'
替换为您要处理的图像文件的实际路径和文件名。
应用二值化阈值处理
应用二值化阈值处理,将灰度图像转换为二值图像:
ret, ref = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
127
是阈值。255
是最大值。cv2.THRESH_BINARY_INV
表示反转二值化。
创建结构元素
创建一个3x3的结构元素用于形态学操作:
kernel = np.ones((3, 3), np.uint8)
膨胀和腐蚀操作
使用结构元素对图像进行膨胀和腐蚀操作:
# 使用结构元素对图像进行膨胀操作
dilate = cv2.dilate(ref, kernel, iterations=5)
# 使用结构元素对图像进行腐蚀操作
erode = cv2.erode(ref, kernel, iterations=5)
堆叠图像
将膨胀和腐蚀后的图像水平堆叠在一起:
res = np.hstack((dilate, erode))
显示堆叠后的图像
使用之前定义的 show_img
函数来显示堆叠后的图像:
show_img('res', res)
计算梯度(梯度 = 膨胀 - 腐蚀)
使用结构元素计算图像的梯度:
gradient = cv2.morphologyEx(ref, cv2.MORPH_GRADIENT, kernel)
显示梯度图像
显示计算得到的梯度图像:
最后得到的是,膨胀的边缘
show_img('gradient', gradient)