以下是抓取算法的代码。我想得到白色而不是原始颜色的结果forground。以下是从link的以下代码中获得的输出。
import numpy as np
import cv2
from matplotlib
import pyplot as plt
img = cv2.imread('messi5.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)
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()
答案 0 :(得分:0)
在此行cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
之后,您将获得具有4个不同值的单个通道掩码:
- GC_FGD = 0
- GC_BGD = 1
- GC_PR_FGD = 2
- GC_PR_BGD = 3。
要从此掩码中获取二进制掩码,您需要将GC_FGD = 0
和GC_PR_FGD = 2
替换为值255
,这可以完成:
mask2 = np.where((mask==2)|(mask==0), 0, 255).astype('uint8')
跳过乘法步骤,将二进制掩码存储在mask2中。