opencv使用区域生长算法进行图像分割代码
时间: 2023-12-27 08:02:37 浏览: 150
以下是使用OpenCV中的区域生长算法进行图像分割的示例代码:
```python
import cv2
# 定义区域生长函数
def region_growing(img, seed):
# 获取图像的高度和宽度
height, width = img.shape
# 定义8邻域
neighborhood = [(i, j) for i in range(-1, 2) for j in range(-1, 2) if not i == j == 0]
# 创建一个mask,初始化为0
mask = np.zeros((height, width), np.uint8)
# 将种子点设为白色
mask[seed] = 255
# 遍历图像,将与种子点相邻的像素点加入mask中
while True:
prev_mask = np.copy(mask)
for i in range(height):
for j in range(width):
if mask[i, j] == 255:
for x, y in neighborhood:
xi, yj = i + x, j + y
if 0 <= xi < height and 0 <= yj < width:
if img[xi, yj] != 0 and mask[xi, yj] == 0:
mask[xi, yj] = 255
# 如果mask没有变化,说明已经找到了所有相邻的像素点,退出循环
if np.all(prev_mask == mask):
break
# 返回mask
return mask
# 读入图像
img = cv2.imread('image.jpg', 0)
# 选择种子点
seed = (100, 100)
# 进行区域生长
mask = region_growing(img, seed)
# 显示原图和分割结果
cv2.imshow("Original Image", img)
cv2.imshow("Segmented Image", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的示例代码中,我们定义了一个 `region_growing` 函数,该函数使用区域生长算法进行图像分割。该函数接受两个参数:一个是输入图像,另一个是种子点。函数通过遍历图像,将与种子点相邻的像素点加入mask中,直到找到所有相邻的像素点为止。最后,函数返回mask,即分割结果。
在主程序中,我们读入一张图像,选择一个种子点,并将图像和分割结果显示出来。
阅读全文