Coding-opencv-开运算-闭运算-膨胀-腐蚀-高斯滤波-中值滤波

开运算-闭运算-膨胀-腐蚀-高斯滤波-中值滤波

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import cv2
import numpy as np
from matplotlib import pyplot as plt

def display_images(images, titles):
"""显示多个图像"""
# 调整布局为3行3列,因为共有7张图,最后一行只会有一个图像
rows = 3
cols = 3
for i, (image, title) in enumerate(zip(images, titles)):
# 使用np.mod来计算正确的子图位置,确保不超过总格数
plt.subplot(rows, cols, i + 1), plt.imshow(image, cmap='gray')
plt.title(title), plt.xticks([]), plt.yticks([])
plt.tight_layout() # 自动调整子图间距
plt.show()

# 图像路径
image_path = 'data\\archive\\jpeg_images\\IMAGES\\img_0001.jpeg'

# 读取图像并转换为灰度图
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 结构元素定义
# kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
kernel = np.ones((3, 3), np.uint8)


# 腐蚀操作
erosion = cv2.erode(image, kernel, iterations=1)

# 膨胀操作
dilation = cv2.dilate(image, kernel, iterations=1)

# 开运算(先腐蚀后膨胀)
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

# 闭运算(先膨胀后腐蚀)
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

# 高斯滤波
gaussian_blur = cv2.GaussianBlur(image, (5, 5), 0)

# 中值滤波
median_blur = cv2.medianBlur(image, 5)

# 准备显示的图像和标题
images = [image, erosion, dilation, opening, closing, gaussian_blur, median_blur]
titles = ['Original Image', 'Erosion', 'Dilation', 'Opening', 'Closing', 'Gaussian Blur', 'Median Blur']

# 显示图像
display_images(images, titles)