利用opencv编程实现直方图谷底法的图像二阈值分割。即绘制直方图,然后找到谷点设定为阈值T1和T2,使用这两个阈值将下面一副图像分成三种灰度级0,100,255。再将分割图进行伪彩色处理,背景颜色为紫色[140,50,250],房屋主体颜色为绿色[100,150,0],阴影颜色为蓝色[255,12,0]。
时间: 2024-02-22 14:55:55 浏览: 137
好的,以下是利用OpenCV实现直方图谷底法的图像二阈值分割的Python代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg', 0)
# 绘制直方图
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
hist = hist.reshape(hist.shape[0])
# 找到直方图谷点
valleys = []
for i in range(1, 255):
if hist[i-1] > hist[i] < hist[i+1]:
valleys.append(i)
# 设置阈值T1和T2
T1, T2 = valleys[0], valleys[-1]
# 图像二阈值分割
img_binary = np.zeros_like(img)
img_binary[(img >= T1) & (img <= T2)] = 100
img_binary[img > T2] = 255
# 伪彩色处理
img_color = np.zeros((img.shape[0], img.shape[1], 3), dtype=np.uint8)
img_color[img_binary == 0] = [140, 50, 250] # 紫色背景
img_color[img_binary == 100] = [100, 150, 0] # 绿色房屋主体
img_color[img_binary == 255] = [255, 12, 0] # 蓝色阴影
# 显示分割图像
cv2.imshow('Segementation', img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`input.jpg`是待分割的图像,代码中使用了灰度图像进行处理。执行完毕后,会显示出分割图像。
阅读全文