cv2.grabCut的例子
时间: 2023-06-17 21:02:07 浏览: 52
以下是使用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函数需要在一个迭代过程中进行多次计算,因此它的运行时间可能会很长。如果处理的图像大小较大,可能需要等待一段时间才能看到结果。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)