2017-04-17 8 views
0

これは、グラブカットアルゴリズムの次のコードです。私は元の色の代わりに白色の結果としてforgroundを得たいと思います。ここには、linkの次のコードから得られた出力があります。このラインcv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)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

は、すなわち4つの異なる値を持つ単一チャネルマスク得る:= 0

  • GC_BGD = 1
  • GC_PR_FGD

    • GC_FGDを= 2
    • G C_PR_BGD = 3

    としてあなたが行うことができる値255GC_FGD = 0GC_PR_FGD = 2を、交換する必要があり、このマスクのうち、バイナリマスクを取得するには:

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

    が乗算ステップをスキップし、バイナリマスクがmask2に格納されています。

  • 関連する問題