graphcuts图像分割代码
时间: 2023-09-01 22:10:31 浏览: 87
GraphCut是一种基于图论的图像分割算法,它通过将图像转换为图的形式,利用最小割来实现图像分割。
以下是使用Python和OpenCV实现GraphCut图像分割的示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg')
# 创建掩模和背景模型
mask = np.zeros(img.shape[:2], np.uint8)
bgModel = np.zeros((1, 65), np.float64)
fgModel = np.zeros((1, 65), np.float64)
# 定义矩形区域,其中要进行前景分割的对象位于其中
rect = (50, 50, 450, 290)
# 进行分割
cv2.grabCut(img, mask, rect, bgModel, fgModel, 5, cv2.GC_INIT_WITH_RECT)
# 创建新的掩模,其中确定的前景和可能的前景被标记为1,背景和可能的背景被标记为0
new_mask = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')
# 将原始图像与新的掩模相乘以获取分割后的图像
segmented = img * new_mask[:, :, np.newaxis]
# 显示结果
cv2.imshow("Segmented Image", segmented)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取输入图像并创建一个空的掩模和背景模型。然后,我们定义一个矩形区域,其中要进行前景分割的对象位于其中。接下来,我们使用`cv2.grabCut()`函数进行图像分割,并创建一个新的掩模,其中确定的前景和可能的前景被标记为1,背景和可能的背景被标记为0。最后,我们将原始图像与新的掩模相乘以获取分割后的图像,并将其显示出来。
需要注意的是,GraphCut算法的运行时间较长,因此在处理大型图像时可能会需要一些时间。
阅读全文