119. 图像的形态学梯度

2025-09-11  本文已影响0人  大龙10

8. 形态学图像处理索引

一、形态学基本操作

二、形态学梯度

三、函数

cv.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )→ dst

函数 cv.morphologyEx 使用侵蚀(erosion)和膨胀(dilation)作为基本操作来执行高级形态转换。

四、例程


import cv2
import numpy as np
from matplotlib import pyplot as plt

# 10.7 图像的形态学梯度运算 (cv.morphologyEx)
# 读取原始图像
imgGray = cv2.imread(r"E:/OpenCV/Fig0905a.tif", flags=0)  # flags=0 读取为灰度图像
ret, imgBin = cv2.threshold(imgGray, 15, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)  # 二值化处理

# 图像的形态学梯度
kSize = (3, 3)  # 卷积核的尺寸
kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
imgGrad1 = cv2.morphologyEx(imgBin, cv2.MORPH_GRADIENT, kernel)  # 形态学梯度

kSize = (5, 5)  # 卷积核的尺寸
kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
imgGrad2 = cv2.morphologyEx(imgBin, cv2.MORPH_GRADIENT, kernel)  # 形态学梯度

kSize = (3, 3)  # 卷积核的尺寸
kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
imgOpen = cv2.morphologyEx(imgBin, cv2.MORPH_OPEN, kernel)  # 开运算
imgOpenGrad = cv2.morphologyEx(imgOpen, cv2.MORPH_GRADIENT, kernel)  # 形态学梯度

plt.figure(figsize=(10, 5))
plt.subplot(141), plt.axis('off'), plt.title("Origin")
plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255)
plt.subplot(142), plt.title("Gradient (size=3)"), plt.axis('off')
plt.imshow(imgGrad1, cmap='gray', vmin=0, vmax=255)
plt.subplot(143), plt.title("Gradient (size=5)"), plt.axis('off')
plt.imshow(imgGrad2, cmap='gray', vmin=0, vmax=255)
plt.subplot(144), plt.title("Opening -> Gradient"), plt.axis('off')
plt.imshow(imgOpenGrad, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()

五、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/123344496
上一篇 下一篇

猜你喜欢

热点阅读