cv2.grabCut的例子
时间: 2023-06-17 10:02:07 浏览: 106
openCV中grabcut图像分割函数使用示例(VC++)
5星 · 资源好评率100%
以下是使用OpenCV中的grabCut函数进行图像分割的示例代码:
``` python
import numpy as np
import cv2
# 读取输入图像
img = cv2.imread('input.jpg')
# 创建一个与原图像大小相同的掩码
mask = np.zeros(img.shape[:2],np.uint8)
# 定义前景和背景模型
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
# 定义要分割的区域
rect = (50,50,450,290)
# 使用grabCut函数进行图像分割
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
# 将掩码中所有值为0和2的像素设置为0,将所有值为1和3的像素设置为1
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
# 将原图像与掩码进行按位与运算,提取前景
img = img*mask2[:,:,np.newaxis]
# 显示结果
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先读取了一个输入图像,然后创建了一个与原图像大小相同的掩码。我们还定义了前景和背景模型,以及要分割的区域。然后,我们使用grabCut函数进行图像分割,并将掩码中所有值为0和2的像素设置为0,将所有值为1和3的像素设置为1。最后,我们将原图像与掩码进行按位与运算,提取前景,并将结果显示出来。
请注意,grabCut函数需要在一个迭代过程中进行多次计算,因此它的运行时间可能会很长。如果处理的图像大小较大,可能需要等待一段时间才能看到结果。
阅读全文