Python编程实现基于全局阈值和自适应阈值的图像分割算法。
时间: 2024-02-06 21:09:06 浏览: 96
利用粒子群算法与遗传算法实现图像的自适应多阈值的快速分割.zip
5星 · 资源好评率100%
好的,下面是Python代码实现基于全局阈值和自适应阈值的图像分割算法。
首先,我们导入需要的库,包括OpenCV和NumPy:
```python
import cv2
import numpy as np
```
然后,我们读取一张灰度图像:
```python
img = cv2.imread('image.jpg', 0)
```
接下来,我们实现基于全局阈值的图像分割算法。我们使用`cv2.threshold()`函数来实现。该函数会将图像中所有像素点的灰度值与阈值进行比较。如果像素点的灰度值大于阈值,则将其设置为最大值,否则将其设置为0。这里我们将阈值设置为127。
```python
# 全局阈值
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
```
接下来,我们实现基于自适应阈值的图像分割算法。自适应阈值是根据图像中每个像素点周围像素的灰度值来动态确定的。我们使用`cv2.adaptiveThreshold()`函数来实现。该函数需要指定邻域大小、C值(用于调整阈值的常数),以及阈值类型。这里我们将邻域大小设置为11,C值设置为2,阈值类型设置为`cv2.THRESH_BINARY`。
```python
# 自适应阈值
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
```
最后,我们将原图像、全局阈值图像和自适应阈值图像显示出来:
```python
cv2.imshow('Original Image', img)
cv2.imshow('Global Thresholding (v = 127)', th1)
cv2.imshow('Adaptive Thresholding', th2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
完整代码如下:
```python
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('image.jpg', 0)
# 全局阈值
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 自适应阈值
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# 显示图像
cv2.imshow('Original Image', img)
cv2.imshow('Global Thresholding (v = 127)', th1)
cv2.imshow('Adaptive Thresholding', th2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文