读入一幅图像,输出其直方图,选取阈值,分割图像;尝试改变阈值大小,观察分割结果的变化;在一个窗口中输出原图像和提取结果,并给每幅子图像加上标题
时间: 2024-05-01 08:23:54 浏览: 89
图像分割各种阈值选取
下面是Python代码实现:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读入图像
img = cv2.imread('image.jpg', 0)
# 计算直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 绘制直方图
plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.show()
# 分割图像
threshold = 128
ret, thresh_img = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
# 显示原图像和分割结果
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.xticks([])
plt.yticks([])
plt.subplot(122)
plt.imshow(thresh_img, cmap='gray')
plt.title('Thresholded Image')
plt.xticks([])
plt.yticks([])
plt.show()
```
这段代码首先读入一幅图像,然后计算其直方图并绘制出来。接着使用cv2.threshold()函数对图像进行二值化分割,得到分割结果。最后使用matplotlib库将原图像和分割结果显示在同一个窗口内,加上标题并展示窗口。
阅读全文