2017-04-17 123 views
0

这是用于抓取算法的以下代码。我想用白色代替原来的颜色得到最终的forground。以下是从link的以下代码中获得的输出。如何在grabcut算法后将生成的前景颜色更改为白色?

enter image description here

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

此线cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)后,得到一个单一的通道掩模即4个不同的值:

  • GC_FGD = 0
  • GC_BGD = 1
  • GC_PR_FGD = 2
  • G C_PR_BGD = 3

为了得到一个二进制屏蔽掉这个面具,你需要更换GC_FGD = 0GC_PR_FGD = 2与价值观255,这是可以做到的是:

mask2 = np.where((mask==2)|(mask==0), 0, 255).astype('uint8') 

跳过乘法一步,你有你的二进制掩码存储在mask2中。

相关问题