1.灰度图像膨胀、腐蚀、开运算、闭运算 (1)读取一副灰度图像,对灰度图像进行膨胀、腐蚀、开运算、闭运算。 (2)验证开和闭运算具有幂等性。 将灰度图像和四个运算结果图像在同一个窗口带标题显示;将一次开运算、三次开运算、一次闭运算、三次闭运算的图像在另外一个窗口带标题显示。
时间: 2023-10-20 15:12:51 浏览: 82
下面是使用Python和OpenCV库实现该任务的代码:
```python
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
# 定义结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# 膨胀操作
dilation = cv2.dilate(img, kernel, iterations=1)
# 腐蚀操作
erosion = cv2.erode(img, kernel, iterations=1)
# 开运算
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# 闭运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# 幂等性验证
assert np.array_equal(opening, cv2.morphologyEx(opening, cv2.MORPH_OPEN, kernel))
assert np.array_equal(closing, cv2.morphologyEx(closing, cv2.MORPH_CLOSE, kernel))
# 将图像和运算结果放在同一窗口显示
result = np.concatenate((img, dilation, erosion, opening, closing), axis=1)
cv2.imshow('Gray Image and Morphological Operations', result)
cv2.waitKey(0)
# 多次开闭运算
opening1 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=1)
opening3 = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=3)
closing1 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=1)
closing3 = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=3)
# 将多次运算结果放在同一窗口显示
result2 = np.concatenate((opening1, opening3, closing1, closing3), axis=1)
cv2.imshow('Multiple Morphological Operations', result2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`getStructuringElement`函数用于创建结构元素,`dilate`函数用于膨胀操作,`erode`函数用于腐蚀操作,`morphologyEx`函数用于开闭运算,`np.concatenate`函数用于将多个图像合并在一起。在验证幂等性时,使用`np.array_equal`函数比较两个图像是否相同。运行代码后会弹出两个窗口,一个是包含灰度图像和四个运算结果的窗口,另一个是包含多次运算结果的窗口。
阅读全文