使用cv2.morphologyEx()函数实现二值图像的开运算和闭运算。
时间: 2024-05-13 12:13:55 浏览: 123
好的,我会给您讲解一下使用cv2.morphologyEx()函数实现二值图像的开运算和闭运算。
首先,我们需要导入OpenCV库和Numpy库:
```python
import cv2
import numpy as np
```
然后,我们需要读入一张二值图像,可以使用cv2.imread()函数读入一张灰度图像,并使用cv2.threshold()函数将其转化为二值图像。这里以读入一张名为“binary.png”的二值图像为例:
```python
img = cv2.imread('binary.png', 0)
# 将图像转化为二值图像
_, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
```
接下来,我们就可以使用cv2.morphologyEx()函数来实现开运算和闭运算。这个函数的参数包括输入图像、操作类型、核函数、迭代次数等。其中,操作类型有四种:开运算、闭运算、梯度运算和顶帽运算。这里我们只需要使用前两种运算类型。
使用cv2.getStructuringElement()函数可以创建核函数,核函数的大小和形状可以自定义。这里我们创建一个3x3的矩形形状的核函数:
```python
# 创建核函数
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
```
接下来,我们就可以使用cv2.morphologyEx()函数来实现开运算和闭运算。开运算可以去除小的噪点和连接处的小断点,闭运算可以填补小孔洞和连接处的小断裂。
```python
# 实现开运算
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)
# 实现闭运算
closing = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel, iterations=1)
```
最后,我们可以将原始图像、二值图像、开运算图像和闭运算图像在同一窗口中显示出来:
```python
# 将四幅图像在同一窗口中显示
cv2.imshow("Original", img)
cv2.imshow("Binary", binary)
cv2.imshow("Opening", opening)
cv2.imshow("Closing", closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这样就可以实现二值图像的开运算和闭运算了。
阅读全文