编写Python代码做出图像的灰度直方图,观察灰度直方图的分布,估计分割背景和目标的大致阈值; 2、编写Python代码使用极小点阈值法确定区域分割的阈值,并用该阈值分割两个图像的背景和目标(转成二值图像),观察分割后的图像; 3、编写Python代码使用迭代阈值法确定区域分割的阈值,并用该阈值分割两个图像的背景和目标(转成二值图像) ,观察分割后的图像;
时间: 2024-02-11 11:03:43 浏览: 93
基于Python的图像阈值化分割(迭代法)
1、使用Python和OpenCV库可以轻松实现图像的灰度直方图生成和绘制。以下是一个示例代码:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 计算灰度直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
# 绘制灰度直方图
plt.hist(img.ravel(),256,[0,256])
plt.show()
```
2、极小点阈值法是一种简单有效的图像分割方法,其基本思路是在灰度直方图上找到局部最小值点,将该点作为阈值进行分割。以下是一个示例代码:
```python
import cv2
import numpy as np
# 读取图像并转为灰度图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 计算灰度直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
# 找到局部最小值点
minIdx = np.argmin(hist)
# 以最小值点作为阈值进行二值化
ret,thresh = cv2.threshold(img,minIdx,255,cv2.THRESH_BINARY)
# 显示二值化结果
cv2.imshow('thresh', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3、迭代阈值法是一种基于图像灰度分布的自适应阈值分割方法,其基本思路是先初选一个阈值,然后分别计算阈值以上和以下的两个灰度区间的平均值,再将两个平均值的均值作为新的阈值,如此迭代直到满足一定条件为止。以下是一个示例代码:
```python
import cv2
# 读取图像并转为灰度图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 初始化阈值和误差
thresh = 127
delta = 1
# 迭代计算阈值
while delta > 0.5:
# 计算阈值以上和以下的两个灰度区间的平均值
mean1 = cv2.mean(img[img>thresh])[0]
mean2 = cv2.mean(img[img<=thresh])[0]
# 更新阈值和误差
newThresh = int((mean1 + mean2) / 2)
delta = abs(thresh - newThresh)
thresh = newThresh
# 以迭代得到的阈值进行二值化
ret,thresh = cv2.threshold(img,thresh,255,cv2.THRESH_BINARY)
# 显示二值化结果
cv2.imshow('thresh', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文