python opncv实现区域生长方法对图像分割代码例子
时间: 2024-01-31 10:02:11 浏览: 70
区域生长法图像分割代码
以下是一个Python OpenCV实现区域生长方法对图像分割的代码示例:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('image.png')
# 将图片转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 初始化mask,用于记录每个像素是否被访问过
mask = np.zeros_like(gray, dtype=np.uint8)
# 区域生长函数
def region_grow(img, seed, threshold):
# 初始化队列
queue = []
queue.append(seed)
# 取出种子像素值
seed_value = img[seed[1], seed[0]]
# 初始化分割结果
segmented = np.zeros_like(img, dtype=np.uint8)
# 不断从队列中取出像素点
while len(queue) > 0:
# 取出队列中的第一个像素点
current_point = queue.pop(0)
x = current_point[0]
y = current_point[1]
# 对当前像素点进行访问标记
mask[y, x] = 255
# 如果像素值小于阈值,则将像素点添加到分割结果中,并将其8邻域中未访问的像素加入队列
if abs(int(img[y, x]) - int(seed_value)) < threshold:
segmented[y, x] = 255
if y > 0 and mask[y-1, x] == 0:
queue.append((x, y-1))
if y < img.shape[0]-1 and mask[y+1, x] == 0:
queue.append((x, y+1))
if x > 0 and mask[y, x-1] == 0:
queue.append((x-1, y))
if x < img.shape[1]-1 and mask[y, x+1] == 0:
queue.append((x+1, y))
# 返回分割结果
return segmented
# 选取种子点进行区域生长分割
seed = (100, 100)
threshold = 10
segmented = region_grow(gray, seed, threshold)
# 显示原图和分割结果
cv2.imshow('original', img)
cv2.imshow('segmented', segmented)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注:在此代码示例中,我们使用区域生长方法对一幅灰度图像进行了分割,选取了一个种子点作为分割的起始点,设定了一个阈值进行分割,最终得到了分割结果。
阅读全文