2017-04-17 118 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中。

相關問題